mirror of
https://github.com/ChristianLight/tutor.git
synced 2024-12-04 19:03:39 +00:00
feat: upgrade to quince
This commit is contained in:
parent
71e469174f
commit
0ccf48690a
12
CHANGELOG.md
12
CHANGELOG.md
@ -20,6 +20,18 @@ instructions, because git commits are used to generate release notes:
|
|||||||
|
|
||||||
<!-- scriv-insert-here -->
|
<!-- scriv-insert-here -->
|
||||||
|
|
||||||
|
<a id='changelog-17.0.0'></a>
|
||||||
|
## v17.0.0 (2023-12-09)
|
||||||
|
|
||||||
|
- 💥[Feature] Upgrade to Quince. (by @regisb)
|
||||||
|
- 💥[Feature] Replace "*.local.overhang.io" hostnames by "*.local.edly.io". (by @regisb)
|
||||||
|
- 💥[Feature] Enable the Indigo theme by default, if no other theme is set. (by @regisb)
|
||||||
|
- 💥[Deprecation] Tutor no longer supports the legacy Docker builder, which was previously available by setting `DOCKER_BUILDKIT=0` in the host environment. Going forward, Tutor will always use BuildKit (a.k.a. `docker buildx` in Docker v19-v22, or just `docker build` in Docker v23). This transition will improve build performance and should be seamless for Tutor users who are running a supported Docker version (by @kdmccormick).
|
||||||
|
- 💥[Deprecation] The template variable `is_buildkit_enabled`, which now always returns True, is deprecated. Plugin authors should assume BuildKit is enabled and remove the variable from their templates (by @kdmccormick).
|
||||||
|
- 💥[Deprecation] Adding Python packages to edx-platform via `private.txt` is no longer supported. Instead, users should bind-mount their requirement directories with `tutor mounts add ...`. (by @regisb)
|
||||||
|
- [Bugfix] Updated how the Tutor setting `JWT_RSA_PRIVATE_KEY` is rendered into the LMS Django setting `JWT_AUTH['JWT_PRIVATE_SIGNING_JWK']` as required by a recent breaking upstream change. The new representation of the `JWT_PRIVATE_SIGNING_JWK` simply adds the `dq`, `dp`, and `qi` parameters. Without this fix, LMS would encounter an `InvalidKeyError` on all logins. (by @kdmccormick)
|
||||||
|
- [Improvement] You don't have to run `tutor config save` every time you enable or disable a plugin anymore. (by @CodeWithEmad)
|
||||||
|
|
||||||
<a id='changelog-16.1.8'></a>
|
<a id='changelog-16.1.8'></a>
|
||||||
## v16.1.8 (2023-12-10)
|
## v16.1.8 (2023-12-10)
|
||||||
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
- [Deprecation] The template variable ``is_buildkit_enabled``, which now always returns True, is deprecated. Plugin authors should assume BuildKit is enabled and remove the variable from their templates (by @kdmccormick).
|
|
||||||
- 💥[Deprecation] Tutor no longer supports the legacy Docker builder, which was previously available by setting ``DOCKER_BUILDKIT=0`` in the host environment. Going forward, Tutor will always use BuildKit (a.k.a. ``docker buildx`` in Docker v19-v22, or just ``docker build`` in Docker v23). This transition will improve build performance and should be seamless for Tutor users who are running a supported Docker version (by @kdmccormick).
|
|
@ -1 +0,0 @@
|
|||||||
- [Improvement] You don't have to run `tutor config save` every time you enable or disable a plugin anymore. (by @CodeWithEmad)
|
|
@ -1 +0,0 @@
|
|||||||
- [Bugfix] Updated how the Tutor setting ``JWT_RSA_PRIVATE_KEY`` is rendered into the LMS Django setting ``JWT_AUTH['JWT_PRIVATE_SIGNING_JWK']`` as required by a recent breaking upstream change. The new representation of the ``JWT_PRIVATE_SIGNING_JWK`` simply adds the ``dq``, ``dp``, and ``qi`` parameters. Without this fix, LMS would encounter an ``InvalidKeyError`` on all logins (by @kdmccormick).
|
|
@ -1 +0,0 @@
|
|||||||
- 💥[Feature] Replace "*.local.overhang.io" hostnames by "*.local.edly.io". (by @regisb)
|
|
@ -136,7 +136,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.
|
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/palm.4"``, or ``master`` in :ref:`nightly <nightly>`)
|
- ``OPENEDX_COMMON_VERSION`` (default: ``"open-release/quince.1"``, or ``master`` in :ref:`nightly <nightly>`)
|
||||||
|
|
||||||
This defines the default version that will be pulled from all Open edX git repositories.
|
This defines the default version that will be pulled from all Open edX git repositories.
|
||||||
|
|
||||||
@ -156,9 +156,9 @@ These two configuration parameters define which Redis database to use for Open e
|
|||||||
|
|
||||||
.. _openedx_extra_pip_requirements:
|
.. _openedx_extra_pip_requirements:
|
||||||
|
|
||||||
- ``OPENEDX_EXTRA_PIP_REQUIREMENTS`` (default: ``["openedx-scorm-xblock>=16.0.0,<17.0.0"]``)
|
- ``OPENEDX_EXTRA_PIP_REQUIREMENTS`` (default: ``[]``)
|
||||||
|
|
||||||
This defines extra pip packages that are going to be installed for Open edX.
|
Define extra pip packages that are going to be installed for edx-platform.
|
||||||
|
|
||||||
- ``NPM_REGISTRY`` (default: ``"https://registry.npmjs.org/"``)
|
- ``NPM_REGISTRY`` (default: ``"https://registry.npmjs.org/"``)
|
||||||
|
|
||||||
@ -354,36 +354,16 @@ See :ref:`the corresponding tutorial <theming>`.
|
|||||||
|
|
||||||
.. _custom_extra_xblocks:
|
.. _custom_extra_xblocks:
|
||||||
|
|
||||||
Installing extra xblocks and requirements
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
Would you like to include custom xblocks, or extra requirements to your Open edX platform? Additional requirements can be added to the ``OPENEDX_EXTRA_PIP_REQUIREMENTS`` parameter in the :ref:`config file <configuration>` or to the ``env/build/openedx/requirements/private.txt`` file. The difference between them, is that ``private.txt`` file, even though it could be used for both, :ref:`should be used for installing extra xblocks or requirements from private repositories <extra_private_xblocks>`. For instance, to include the `polling xblock from Opencraft <https://github.com/open-craft/xblock-poll/>`_:
|
Would you like to include custom xblocks, or extra requirements to your Open edX platform? Additional requirements can be added to the ``OPENEDX_EXTRA_PIP_REQUIREMENTS`` parameter in the :ref:`config file <configuration>`. For instance, to include the `polling xblock from Opencraft <https://github.com/open-craft/xblock-poll/>`_:
|
||||||
|
|
||||||
tutor config save --append OPENEDX_EXTRA_PIP_REQUIREMENTS=git+https://github.com/open-craft/xblock-poll.git
|
tutor config save --append OPENEDX_EXTRA_PIP_REQUIREMENTS=git+https://github.com/open-craft/xblock-poll.git
|
||||||
|
|
||||||
Alternatively, add the dependency to ``private.txt``::
|
|
||||||
|
|
||||||
echo "git+https://github.com/open-craft/xblock-poll.git" >> "$(tutor config printroot)/env/build/openedx/requirements/private.txt"
|
|
||||||
|
|
||||||
Then, the ``openedx`` docker image must be rebuilt::
|
Then, the ``openedx`` docker image must be rebuilt::
|
||||||
|
|
||||||
tutor images build openedx
|
tutor images build openedx
|
||||||
|
|
||||||
.. _extra_private_xblocks:
|
|
||||||
|
|
||||||
Installing extra requirements from private repositories
|
|
||||||
*******************************************************
|
|
||||||
|
|
||||||
When installing extra xblock or requirements from private repositories, ``private.txt`` file should be used, because it allows installing dependencies without adding git credentials to the Docker image. By adding your git credentials to the Docker image, you're risking leaking your git credentials, if you were to publish (intentionally or unintentionally) the Docker image in a public place.
|
|
||||||
|
|
||||||
To install xblocks from a private repository that requires authentication, you must first clone the repository inside the ``openedx/requirements`` folder on the host::
|
|
||||||
|
|
||||||
git clone git@github.com:me/myprivaterepo.git "$(tutor config printroot)/env/build/openedx/requirements/myprivaterepo"
|
|
||||||
|
|
||||||
Then, declare your extra requirements with the ``-e`` flag in ``openedx/requirements/private.txt``::
|
|
||||||
|
|
||||||
echo "-e ./myprivaterepo" >> "$(tutor config printroot)/env/build/openedx/requirements/private.txt"
|
|
||||||
|
|
||||||
.. _edx_platform_fork:
|
.. _edx_platform_fork:
|
||||||
|
|
||||||
Running a fork of ``edx-platform``
|
Running a fork of ``edx-platform``
|
||||||
@ -401,16 +381,16 @@ Note that your edx-platform version must be a fork of the latest release **tag**
|
|||||||
|
|
||||||
If you don't create your fork from this tag, you *will* have important compatibility issues with other services. In particular:
|
If you don't create your fork from this tag, you *will* have important compatibility issues with other services. In particular:
|
||||||
|
|
||||||
- Do not try to run a fork from an older (pre-Palm) version of edx-platform: this will simply not work.
|
- Do not try to run a fork from an older (pre-Quince) version of edx-platform: this will simply not work.
|
||||||
- Do not try to run a fork from the edx-platform master branch: there is a 99% probability that it will fail.
|
- Do not try to run a fork from the edx-platform master branch: there is a 99% probability that it will fail.
|
||||||
- Do not try to run a fork from the open-release/palm.master branch: Tutor will attempt to apply security and bug fix patches that might already be included in the open-release/palm.master but which were not yet applied to the latest release tag. Patch application will thus fail if you base your fork from the open-release/palm.master branch.
|
- Do not try to run a fork from the open-release/quince.master branch: Tutor will attempt to apply security and bug fix patches that might already be included in the open-release/quince.master but which were not yet applied to the latest release tag. Patch application will thus fail if you base your fork from the open-release/quince.master branch.
|
||||||
|
|
||||||
.. _i18n:
|
.. _i18n:
|
||||||
|
|
||||||
Adding custom translations
|
Adding custom translations
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
If you are not running Open edX in English (``LANGUAGE_CODE`` default: ``"en"``), chances are that some strings will not be properly translated. In most cases, this is because not enough contributors have helped translate Open edX into your language. It happens! With Tutor, available translated languages include those that come bundled with `edx-platform <https://github.com/openedx/edx-platform/tree/open-release/palm.master/conf/locale>`__ as well as those from `openedx-i18n <https://github.com/openedx/openedx-i18n/tree/master/edx-platform/locale>`__.
|
If you are not running Open edX in English (``LANGUAGE_CODE`` default: ``"en"``), chances are that some strings will not be properly translated. In most cases, this is because not enough contributors have helped translate Open edX into your language. It happens! With Tutor, available translated languages include those that come bundled with `edx-platform <https://github.com/openedx/edx-platform/tree/open-release/quince.master/conf/locale>`__ as well as those from `openedx-i18n <https://github.com/openedx/openedx-i18n/tree/master/edx-platform/locale>`__.
|
||||||
|
|
||||||
Tutor offers a relatively simple mechanism to add custom translations to the openedx Docker image. You should create a folder that corresponds to your language code in the "build/openedx/locale" folder of the Tutor environment. This folder should contain a "LC_MESSAGES" folder. For instance::
|
Tutor offers a relatively simple mechanism to add custom translations to the openedx Docker image. You should create a folder that corresponds to your language code in the "build/openedx/locale" folder of the Tutor environment. This folder should contain a "LC_MESSAGES" folder. For instance::
|
||||||
|
|
||||||
@ -431,9 +411,9 @@ Then, add a "django.po" file there that will contain your custom translations::
|
|||||||
.. warning::
|
.. warning::
|
||||||
Don't forget to specify the file ``Content-Type`` when adding message strings with non-ASCII characters; otherwise a ``UnicodeDecodeError`` will be raised during compilation.
|
Don't forget to specify the file ``Content-Type`` when adding message strings with non-ASCII characters; otherwise a ``UnicodeDecodeError`` will be raised during compilation.
|
||||||
|
|
||||||
The "String to translate" part should match *exactly* the string that you would like to translate. You cannot make it up! The best way to find this string is to copy-paste it from the `upstream django.po file for the English language <https://github.com/openedx/edx-platform/blob/open-release/palm.master/conf/locale/en/LC_MESSAGES/django.po>`__.
|
The "String to translate" part should match *exactly* the string that you would like to translate. You cannot make it up! The best way to find this string is to copy-paste it from the `upstream django.po file for the English language <https://github.com/openedx/edx-platform/blob/open-release/quince.master/conf/locale/en/LC_MESSAGES/django.po>`__.
|
||||||
|
|
||||||
If you cannot find the string to translate in this file, then it means that you are trying to translate a string that is used in some piece of javascript code. Those strings are stored in a different file named "djangojs.po". You can check it out `in the edx-platform repo as well <https://github.com/openedx/edx-platform/blob/open-release/palm.master/conf/locale/en/LC_MESSAGES/djangojs.po>`__. Your custom javascript strings should also be stored in a "djangojs.po" file that should be placed in the same directory.
|
If you cannot find the string to translate in this file, then it means that you are trying to translate a string that is used in some piece of javascript code. Those strings are stored in a different file named "djangojs.po". You can check it out `in the edx-platform repo as well <https://github.com/openedx/edx-platform/blob/open-release/quince.master/conf/locale/en/LC_MESSAGES/djangojs.po>`__. Your custom javascript strings should also be stored in a "djangojs.po" file that should be placed in the same directory.
|
||||||
|
|
||||||
To recap, here is an example. To translate a few strings in French, both from django.po and djangojs.po, we would have the following file hierarchy::
|
To recap, here is an example. To translate a few strings in French, both from django.po and djangojs.po, we would have the following file hierarchy::
|
||||||
|
|
||||||
|
@ -113,7 +113,7 @@ The ``openedx-dev`` Docker image is based on the same ``openedx`` image used by
|
|||||||
|
|
||||||
- The user that runs inside the container has the same UID as the user on the host, to avoid permission problems inside mounted volumes (and in particular in the edx-platform repository).
|
- The user that runs inside the container has the same UID as the user on the host, to avoid permission problems inside mounted volumes (and in particular in the edx-platform repository).
|
||||||
- Additional Python and system requirements are installed for convenient debugging: `ipython <https://ipython.org/>`__, `ipdb <https://pypi.org/project/ipdb/>`__, vim, telnet.
|
- Additional Python and system requirements are installed for convenient debugging: `ipython <https://ipython.org/>`__, `ipdb <https://pypi.org/project/ipdb/>`__, vim, telnet.
|
||||||
- The edx-platform `development requirements <https://github.com/openedx/edx-platform/blob/open-release/palm.master/requirements/edx/development.in>`__ are installed.
|
- The edx-platform `development requirements <https://github.com/openedx/edx-platform/blob/open-release/quince.master/requirements/edx/development.in>`__ are installed.
|
||||||
|
|
||||||
|
|
||||||
If you are using a custom ``openedx`` image, then you will need to rebuild ``openedx-dev`` every time you modify ``openedx``. To so, run::
|
If you are using a custom ``openedx`` image, then you will need to rebuild ``openedx-dev`` every time you modify ``openedx``. To so, run::
|
||||||
|
@ -38,7 +38,7 @@ The `devstack <https://github.com/openedx/devstack>`_ is meant for development o
|
|||||||
Is Tutor officially supported by edX?
|
Is Tutor officially supported by edX?
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
|
||||||
Yes: as of the Open edX Maple release (December 9th 2021), Tutor is the only officially supported installation method for Open edX: see the `official installation instructions <https://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/open-release-palm.master/installation/index.html>`__.
|
Yes: as of the Open edX Maple release (December 9th 2021), Tutor is the only officially supported installation method for Open edX: see the `official installation instructions <https://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/open-release-quince.master/installation/index.html>`__.
|
||||||
|
|
||||||
What features are missing from Tutor?
|
What features are missing from Tutor?
|
||||||
-------------------------------------
|
-------------------------------------
|
||||||
|
@ -12,7 +12,7 @@ Requirements
|
|||||||
* Architecture: Both AMD64 and ARM64 are supported.
|
* Architecture: Both AMD64 and ARM64 are supported.
|
||||||
* Required software:
|
* Required software:
|
||||||
|
|
||||||
- `Docker <https://docs.docker.com/engine/installation/>`__: v20.10.15+
|
- `Docker <https://docs.docker.com/engine/installation/>`__: v24.0.5+ (with BuildKit 0.11+)
|
||||||
- `Docker Compose <https://docs.docker.com/compose/install/>`__: v2.0.0+
|
- `Docker Compose <https://docs.docker.com/compose/install/>`__: v2.0.0+
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
@ -123,11 +123,11 @@ Major Open edX releases are published twice a year, in June and December, by the
|
|||||||
4. Test the new release in a sandboxed environment.
|
4. Test the new release in a sandboxed environment.
|
||||||
5. If you are running edx-platform, or some other repository from a custom branch, then you should rebase (and test) your changes on top of the latest release tag (see :ref:`edx_platform_fork`).
|
5. If you are running edx-platform, or some other repository from a custom branch, then you should rebase (and test) your changes on top of the latest release tag (see :ref:`edx_platform_fork`).
|
||||||
|
|
||||||
The process for upgrading from one major release to the next works similarly to any other upgrade, with the ``launch`` command (see above). The single difference is that if the ``launch`` command detects that your tutor environment was generated with an older release, it will perform a few release-specific upgrade steps. These extra upgrade steps will be performed just once. But they will be ignored if you updated your local environment (for instance: with ``tutor config save``) before running ``launch``. This situation typically occurs if you need to re-build some Docker images (see above). In such a case, you should make use of the ``upgrade`` command. For instance, to upgrade a local installation from Olive to Palm and rebuild some Docker images, run::
|
The process for upgrading from one major release to the next works similarly to any other upgrade, with the ``launch`` command (see above). The single difference is that if the ``launch`` command detects that your tutor environment was generated with an older release, it will perform a few release-specific upgrade steps. These extra upgrade steps will be performed just once. But they will be ignored if you updated your local environment (for instance: with ``tutor config save``) before running ``launch``. This situation typically occurs if you need to re-build some Docker images (see above). In such a case, you should make use of the ``upgrade`` command. For instance, to upgrade a local installation from Palm to Quince and rebuild some Docker images, run::
|
||||||
|
|
||||||
tutor config save
|
tutor config save
|
||||||
tutor images build all # list the images that should be rebuilt here
|
tutor images build all # list the images that should be rebuilt here
|
||||||
tutor local upgrade --from=olive
|
tutor local upgrade --from=palm
|
||||||
tutor local launch
|
tutor local launch
|
||||||
|
|
||||||
.. _autocomplete:
|
.. _autocomplete:
|
||||||
|
@ -22,7 +22,7 @@ Yes :) This is what happens when you run ``tutor local launch``:
|
|||||||
2. Configuration files are generated from templates.
|
2. Configuration files are generated from templates.
|
||||||
3. Docker images are downloaded.
|
3. Docker images are downloaded.
|
||||||
4. Docker containers are provisioned.
|
4. Docker containers are provisioned.
|
||||||
5. A full, production-ready Open edX platform (`Palm <https://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/open-release-palm.master/platform_releases/palm.html>`__ release) is run with docker-compose.
|
5. A full, production-ready Open edX platform (`Quince <https://edx.readthedocs.io/projects/edx-installing-configuring-and-running/en/open-release-quince.master/platform_releases/quince.html>`__ release) is run with docker-compose.
|
||||||
|
|
||||||
The whole procedure should require less than 10 minutes, on a server with good bandwidth. Note that your host environment will not be affected in any way, since everything runs inside docker containers. Root access is not even necessary.
|
The whole procedure should require less than 10 minutes, on a server with good bandwidth. Note that your host environment will not be affected in any way, since everything runs inside docker containers. Root access is not even necessary.
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@ Plugin indexes are a great way to have your plugins discovered by other users. P
|
|||||||
Index file paths
|
Index file paths
|
||||||
================
|
================
|
||||||
|
|
||||||
A plugin index is a yaml-formatted file. It can be stored on the web or on your computer. In both cases, the index file location must end with "<current release name>/plugins.yml". For instance, the following are valid index locations if you run the Open edX "Palm" release:
|
A plugin index is a yaml-formatted file. It can be stored on the web or on your computer. In both cases, the index file location must end with "<current release name>/plugins.yml". For instance, the following are valid index locations if you run the Open edX "Quince" release:
|
||||||
|
|
||||||
- https://overhang.io/tutor/main/palm/plugins.yml
|
- https://overhang.io/tutor/main/quince/plugins.yml
|
||||||
- ``/path/to/your/local/index/palm/plugins.yml``
|
- ``/path/to/your/local/index/quince/plugins.yml``
|
||||||
|
|
||||||
To add either indexes, run the ``tutor plugins index add`` command without the suffix. For instance::
|
To add either indexes, run the ``tutor plugins index add`` command without the suffix. For instance::
|
||||||
|
|
||||||
@ -106,9 +106,9 @@ Manage plugins in development
|
|||||||
Plugin developers and maintainers often want to install local versions of their plugins. They usually achieve this with ``pip install -e /path/to/tutor-plugin``. We can improve that workflow by creating an index for local plugins::
|
Plugin developers and maintainers often want to install local versions of their plugins. They usually achieve this with ``pip install -e /path/to/tutor-plugin``. We can improve that workflow by creating an index for local plugins::
|
||||||
|
|
||||||
# Create the plugin index directory
|
# Create the plugin index directory
|
||||||
mkdir -p ~/localindex/palm/
|
mkdir -p ~/localindex/quince/
|
||||||
# Edit the index
|
# Edit the index
|
||||||
vim ~/localindex/palm/plugins.yml
|
vim ~/localindex/quince/plugins.yml
|
||||||
|
|
||||||
Add the following to the index::
|
Add the following to the index::
|
||||||
|
|
||||||
|
@ -69,7 +69,7 @@ Quite often, developers don't want to work on edx-platform directly, but on a de
|
|||||||
cd /my/workspace/edx-ora2
|
cd /my/workspace/edx-ora2
|
||||||
git clone https://github.com/openedx/edx-ora2 .
|
git clone https://github.com/openedx/edx-ora2 .
|
||||||
|
|
||||||
Then, check out the right version of the package. This is the version that is indicated in the `edx-platform/requirements/edx/base.txt <https://github.com/openedx/edx-platform/blob/open-release/palm.master/requirements/edx/base.txt>`__. Be careful that the version that is currently in use in your version of edx-platform is **not necessarily the head of the master branch**::
|
Then, check out the right version of the package. This is the version that is indicated in the `edx-platform/requirements/edx/base.txt <https://github.com/openedx/edx-platform/blob/open-release/quince.master/requirements/edx/base.txt>`__. Be careful that the version that is currently in use in your version of edx-platform is **not necessarily the head of the master branch**::
|
||||||
|
|
||||||
git checkout <my-version-tag-or-branch>
|
git checkout <my-version-tag-or-branch>
|
||||||
|
|
||||||
|
@ -6,27 +6,27 @@
|
|||||||
#
|
#
|
||||||
appdirs==1.4.4
|
appdirs==1.4.4
|
||||||
# via -r requirements/base.in
|
# via -r requirements/base.in
|
||||||
cachetools==5.3.1
|
cachetools==5.3.2
|
||||||
# via google-auth
|
# via google-auth
|
||||||
certifi==2023.7.22
|
certifi==2023.7.22
|
||||||
# via
|
# via
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests
|
# requests
|
||||||
charset-normalizer==3.2.0
|
charset-normalizer==3.3.1
|
||||||
# via requests
|
# via requests
|
||||||
click==8.1.7
|
click==8.1.7
|
||||||
# via -r requirements/base.in
|
# via -r requirements/base.in
|
||||||
google-auth==2.22.0
|
google-auth==2.23.3
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
idna==3.4
|
idna==3.4
|
||||||
# via requests
|
# via requests
|
||||||
jinja2==3.1.2
|
jinja2==3.1.2
|
||||||
# via -r requirements/base.in
|
# via -r requirements/base.in
|
||||||
kubernetes==27.2.0
|
kubernetes==28.1.0
|
||||||
# via -r requirements/base.in
|
# via -r requirements/base.in
|
||||||
markupsafe==2.1.3
|
markupsafe==2.1.3
|
||||||
# via jinja2
|
# via jinja2
|
||||||
mypy==1.5.1
|
mypy==1.6.1
|
||||||
# via -r requirements/base.in
|
# via -r requirements/base.in
|
||||||
mypy-extensions==1.0.0
|
mypy-extensions==1.0.0
|
||||||
# via mypy
|
# via mypy
|
||||||
@ -40,7 +40,7 @@ pyasn1==0.5.0
|
|||||||
# rsa
|
# rsa
|
||||||
pyasn1-modules==0.3.0
|
pyasn1-modules==0.3.0
|
||||||
# via google-auth
|
# via google-auth
|
||||||
pycryptodome==3.18.0
|
pycryptodome==3.19.0
|
||||||
# via -r requirements/base.in
|
# via -r requirements/base.in
|
||||||
python-dateutil==2.8.2
|
python-dateutil==2.8.2
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
@ -58,19 +58,17 @@ rsa==4.9
|
|||||||
# via google-auth
|
# via google-auth
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
# via
|
# via
|
||||||
# google-auth
|
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
# via mypy
|
# via mypy
|
||||||
typing-extensions==4.7.1
|
typing-extensions==4.8.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.in
|
# -r requirements/base.in
|
||||||
# mypy
|
# mypy
|
||||||
urllib3==1.26.18
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# google-auth
|
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests
|
# requests
|
||||||
websocket-client==1.6.2
|
websocket-client==1.6.4
|
||||||
# via kubernetes
|
# via kubernetes
|
||||||
|
@ -7,6 +7,12 @@ pyinstaller
|
|||||||
scriv
|
scriv
|
||||||
twine
|
twine
|
||||||
|
|
||||||
|
# Constraints
|
||||||
|
# for compatibility with sphinx-rtd-theme
|
||||||
|
# drop this constraint once sphinx-rtd-theme 2.0.0 comes out
|
||||||
|
# https://github.com/readthedocs/sphinx_rtd_theme/tags
|
||||||
|
docutils<0.19.0
|
||||||
|
|
||||||
# Types packages
|
# Types packages
|
||||||
types-docutils
|
types-docutils
|
||||||
types-PyYAML
|
types-PyYAML
|
||||||
|
@ -4,21 +4,19 @@
|
|||||||
#
|
#
|
||||||
# pip-compile requirements/dev.in
|
# pip-compile requirements/dev.in
|
||||||
#
|
#
|
||||||
altgraph==0.17.3
|
altgraph==0.17.4
|
||||||
# via pyinstaller
|
# via pyinstaller
|
||||||
appdirs==1.4.4
|
appdirs==1.4.4
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
astroid==2.15.6
|
astroid==3.0.1
|
||||||
# via pylint
|
# via pylint
|
||||||
attrs==23.1.0
|
attrs==23.1.0
|
||||||
# via scriv
|
# via scriv
|
||||||
black==23.7.0
|
black==23.10.1
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
bleach==6.0.0
|
build==1.0.3
|
||||||
# via readme-renderer
|
|
||||||
build==0.10.0
|
|
||||||
# via pip-tools
|
# via pip-tools
|
||||||
cachetools==5.3.1
|
cachetools==5.3.2
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
# google-auth
|
||||||
@ -27,9 +25,9 @@ certifi==2023.7.22
|
|||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests
|
# requests
|
||||||
cffi==1.15.1
|
cffi==1.16.0
|
||||||
# via cryptography
|
# via cryptography
|
||||||
charset-normalizer==3.2.0
|
charset-normalizer==3.3.1
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# requests
|
# requests
|
||||||
@ -42,15 +40,17 @@ click==8.1.7
|
|||||||
# scriv
|
# scriv
|
||||||
click-log==0.4.0
|
click-log==0.4.0
|
||||||
# via scriv
|
# via scriv
|
||||||
coverage==7.3.0
|
coverage==7.3.2
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
cryptography==41.0.7
|
cryptography==41.0.7
|
||||||
# via secretstorage
|
# via secretstorage
|
||||||
dill==0.3.7
|
dill==0.3.7
|
||||||
# via pylint
|
# via pylint
|
||||||
docutils==0.20.1
|
docutils==0.18.1
|
||||||
# via readme-renderer
|
# via
|
||||||
google-auth==2.22.0
|
# -r requirements/dev.in
|
||||||
|
# readme-renderer
|
||||||
|
google-auth==2.23.3
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
@ -60,7 +60,9 @@ idna==3.4
|
|||||||
# requests
|
# requests
|
||||||
importlib-metadata==6.8.0
|
importlib-metadata==6.8.0
|
||||||
# via
|
# via
|
||||||
|
# build
|
||||||
# keyring
|
# keyring
|
||||||
|
# pyinstaller
|
||||||
# twine
|
# twine
|
||||||
importlib-resources==6.1.1
|
importlib-resources==6.1.1
|
||||||
# via keyring
|
# via keyring
|
||||||
@ -78,12 +80,12 @@ jinja2==3.1.2
|
|||||||
# scriv
|
# scriv
|
||||||
keyring==24.2.0
|
keyring==24.2.0
|
||||||
# via twine
|
# via twine
|
||||||
kubernetes==27.2.0
|
kubernetes==28.1.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
lazy-object-proxy==1.9.0
|
|
||||||
# via astroid
|
|
||||||
markdown-it-py==3.0.0
|
markdown-it-py==3.0.0
|
||||||
# via rich
|
# via
|
||||||
|
# rich
|
||||||
|
# scriv
|
||||||
markupsafe==2.1.3
|
markupsafe==2.1.3
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
@ -94,29 +96,32 @@ mdurl==0.1.2
|
|||||||
# via markdown-it-py
|
# via markdown-it-py
|
||||||
more-itertools==10.1.0
|
more-itertools==10.1.0
|
||||||
# via jaraco-classes
|
# via jaraco-classes
|
||||||
mypy==1.5.1
|
mypy==1.6.1
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
mypy-extensions==1.0.0
|
mypy-extensions==1.0.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# black
|
# black
|
||||||
# mypy
|
# mypy
|
||||||
|
nh3==0.2.14
|
||||||
|
# via readme-renderer
|
||||||
oauthlib==3.2.2
|
oauthlib==3.2.2
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests-oauthlib
|
# requests-oauthlib
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via
|
# via
|
||||||
# black
|
# black
|
||||||
# build
|
# build
|
||||||
|
# pyinstaller
|
||||||
pathspec==0.11.2
|
pathspec==0.11.2
|
||||||
# via black
|
# via black
|
||||||
pip-tools==7.3.0
|
pip-tools==7.3.0
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
pkginfo==1.9.6
|
pkginfo==1.9.6
|
||||||
# via twine
|
# via twine
|
||||||
platformdirs==3.10.0
|
platformdirs==3.11.0
|
||||||
# via
|
# via
|
||||||
# black
|
# black
|
||||||
# pylint
|
# pylint
|
||||||
@ -131,17 +136,17 @@ pyasn1-modules==0.3.0
|
|||||||
# google-auth
|
# google-auth
|
||||||
pycparser==2.21
|
pycparser==2.21
|
||||||
# via cffi
|
# via cffi
|
||||||
pycryptodome==3.18.0
|
pycryptodome==3.19.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
pygments==2.16.1
|
pygments==2.16.1
|
||||||
# via
|
# via
|
||||||
# readme-renderer
|
# readme-renderer
|
||||||
# rich
|
# rich
|
||||||
pyinstaller==5.13.1
|
pyinstaller==6.1.0
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
pyinstaller-hooks-contrib==2023.7
|
pyinstaller-hooks-contrib==2023.10
|
||||||
# via pyinstaller
|
# via pyinstaller
|
||||||
pylint==2.17.5
|
pylint==3.0.2
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
pyproject-hooks==1.0.0
|
pyproject-hooks==1.0.0
|
||||||
# via build
|
# via build
|
||||||
@ -153,7 +158,7 @@ pyyaml==6.0.1
|
|||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
readme-renderer==41.0
|
readme-renderer==42.0
|
||||||
# via twine
|
# via twine
|
||||||
requests==2.31.0
|
requests==2.31.0
|
||||||
# via
|
# via
|
||||||
@ -171,21 +176,19 @@ requests-toolbelt==1.0.0
|
|||||||
# via twine
|
# via twine
|
||||||
rfc3986==2.0.0
|
rfc3986==2.0.0
|
||||||
# via twine
|
# via twine
|
||||||
rich==13.5.2
|
rich==13.6.0
|
||||||
# via twine
|
# via twine
|
||||||
rsa==4.9
|
rsa==4.9
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
# google-auth
|
||||||
scriv==1.3.1
|
scriv==1.5.0
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
secretstorage==3.3.3
|
secretstorage==3.3.3
|
||||||
# via keyring
|
# via keyring
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# bleach
|
|
||||||
# google-auth
|
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
tomli==2.0.1
|
tomli==2.0.1
|
||||||
@ -203,11 +206,11 @@ twine==4.0.2
|
|||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
types-docutils==0.20.0.3
|
types-docutils==0.20.0.3
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
types-pyyaml==6.0.12.11
|
types-pyyaml==6.0.12.12
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
types-setuptools==68.1.0.0
|
types-setuptools==68.2.0.0
|
||||||
# via -r requirements/dev.in
|
# via -r requirements/dev.in
|
||||||
typing-extensions==4.7.1
|
typing-extensions==4.8.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# astroid
|
# astroid
|
||||||
@ -218,21 +221,16 @@ typing-extensions==4.7.1
|
|||||||
urllib3==1.26.18
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests
|
# requests
|
||||||
# twine
|
# twine
|
||||||
webencodings==0.5.1
|
websocket-client==1.6.4
|
||||||
# via bleach
|
|
||||||
websocket-client==1.6.2
|
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
wheel==0.41.2
|
wheel==0.41.2
|
||||||
# via pip-tools
|
# via pip-tools
|
||||||
wrapt==1.15.0
|
zipp==3.17.0
|
||||||
# via astroid
|
|
||||||
zipp==3.16.2
|
|
||||||
# via
|
# via
|
||||||
# importlib-metadata
|
# importlib-metadata
|
||||||
# importlib-resources
|
# importlib-resources
|
||||||
|
@ -8,9 +8,9 @@ alabaster==0.7.13
|
|||||||
# via sphinx
|
# via sphinx
|
||||||
appdirs==1.4.4
|
appdirs==1.4.4
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
babel==2.12.1
|
babel==2.13.1
|
||||||
# via sphinx
|
# via sphinx
|
||||||
cachetools==5.3.1
|
cachetools==5.3.2
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
# google-auth
|
||||||
@ -19,7 +19,7 @@ certifi==2023.7.22
|
|||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests
|
# requests
|
||||||
charset-normalizer==3.2.0
|
charset-normalizer==3.3.1
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# requests
|
# requests
|
||||||
@ -32,7 +32,7 @@ docutils==0.18.1
|
|||||||
# sphinx
|
# sphinx
|
||||||
# sphinx-click
|
# sphinx-click
|
||||||
# sphinx-rtd-theme
|
# sphinx-rtd-theme
|
||||||
google-auth==2.22.0
|
google-auth==2.23.3
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
@ -48,13 +48,13 @@ jinja2==3.1.2
|
|||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# sphinx
|
# sphinx
|
||||||
kubernetes==27.2.0
|
kubernetes==28.1.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
markupsafe==2.1.3
|
markupsafe==2.1.3
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# jinja2
|
# jinja2
|
||||||
mypy==1.5.1
|
mypy==1.6.1
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
mypy-extensions==1.0.0
|
mypy-extensions==1.0.0
|
||||||
# via
|
# via
|
||||||
@ -65,7 +65,7 @@ oauthlib==3.2.2
|
|||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests-oauthlib
|
# requests-oauthlib
|
||||||
packaging==23.1
|
packaging==23.2
|
||||||
# via sphinx
|
# via sphinx
|
||||||
pyasn1==0.5.0
|
pyasn1==0.5.0
|
||||||
# via
|
# via
|
||||||
@ -76,7 +76,7 @@ pyasn1-modules==0.3.0
|
|||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
# google-auth
|
||||||
pycryptodome==3.18.0
|
pycryptodome==3.19.0
|
||||||
# via -r requirements/base.txt
|
# via -r requirements/base.txt
|
||||||
pygments==2.16.1
|
pygments==2.16.1
|
||||||
# via sphinx
|
# via sphinx
|
||||||
@ -107,7 +107,6 @@ rsa==4.9
|
|||||||
six==1.16.0
|
six==1.16.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# python-dateutil
|
# python-dateutil
|
||||||
snowballstemmer==2.2.0
|
snowballstemmer==2.2.0
|
||||||
@ -140,17 +139,16 @@ tomli==2.0.1
|
|||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# mypy
|
# mypy
|
||||||
typing-extensions==4.7.1
|
typing-extensions==4.8.0
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# mypy
|
# mypy
|
||||||
urllib3==1.26.18
|
urllib3==1.26.18
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# google-auth
|
|
||||||
# kubernetes
|
# kubernetes
|
||||||
# requests
|
# requests
|
||||||
websocket-client==1.6.2
|
websocket-client==1.6.4
|
||||||
# via
|
# via
|
||||||
# -r requirements/base.txt
|
# -r requirements/base.txt
|
||||||
# kubernetes
|
# kubernetes
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
# change version ranges when upgrading from palm
|
# change version ranges when upgrading from quince
|
||||||
tutor-android>=16.0.0,<17.0.0
|
tutor-android>=17.0.0,<18.0.0
|
||||||
tutor-cairn>=16.0.0,<17.0.0
|
tutor-cairn>=17.0.0,<18.0.0
|
||||||
tutor-discovery>=16.0.0,<17.0.0
|
tutor-credentials>=17.0.0,<18.0.0
|
||||||
tutor-ecommerce>=16.0.0,<17.0.0
|
tutor-discovery>=17.0.0,<18.0.0
|
||||||
tutor-forum>=16.0.0,<17.0.0
|
tutor-ecommerce>=17.0.0,<18.0.0
|
||||||
tutor-license>=16.0.0,<17.0.0
|
tutor-forum>=17.0.0,<18.0.0
|
||||||
tutor-mfe>=16.0.0,<17.0.0
|
tutor-jupyter>=17.0.0,<18.0.0
|
||||||
tutor-minio>=16.0.0,<17.0.0
|
tutor-mfe>=17.0.0,<18.0.0
|
||||||
tutor-notes>=16.0.0,<17.0.0
|
tutor-minio>=17.0.0,<18.0.0
|
||||||
tutor-webui>=16.0.0,<17.0.0
|
tutor-notes>=17.0.0,<18.0.0
|
||||||
tutor-xqueue>=16.0.0,<17.0.0
|
tutor-webui>=17.0.0,<18.0.0
|
||||||
|
tutor-xqueue>=17.0.0,<18.0.0
|
||||||
|
@ -94,9 +94,8 @@ class ConfigTests(unittest.TestCase, TestCommandMixin):
|
|||||||
)
|
)
|
||||||
config = tutor_config.load(root)
|
config = tutor_config.load(root)
|
||||||
assert isinstance(config["OPENEDX_EXTRA_PIP_REQUIREMENTS"], list)
|
assert isinstance(config["OPENEDX_EXTRA_PIP_REQUIREMENTS"], list)
|
||||||
self.assertEqual(2, len(config["OPENEDX_EXTRA_PIP_REQUIREMENTS"]))
|
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
"my-package==1.0.0", config["OPENEDX_EXTRA_PIP_REQUIREMENTS"][1]
|
["my-package==1.0.0"], config["OPENEDX_EXTRA_PIP_REQUIREMENTS"]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -260,7 +260,7 @@ class CurrentVersionTests(unittest.TestCase):
|
|||||||
) as f:
|
) as f:
|
||||||
f.write(__version__)
|
f.write(__version__)
|
||||||
self.assertEqual(__version__, env.current_version(root))
|
self.assertEqual(__version__, env.current_version(root))
|
||||||
self.assertEqual("palm", env.get_env_release(root))
|
self.assertEqual("quince", env.get_env_release(root))
|
||||||
self.assertIsNone(env.should_upgrade_from_release(root))
|
self.assertIsNone(env.should_upgrade_from_release(root))
|
||||||
self.assertTrue(env.is_up_to_date(root))
|
self.assertTrue(env.is_up_to_date(root))
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ import os
|
|||||||
|
|
||||||
# Increment this version number to trigger a new release. See
|
# Increment this version number to trigger a new release. See
|
||||||
# docs/tutor.html#versioning for information on the versioning scheme.
|
# docs/tutor.html#versioning for information on the versioning scheme.
|
||||||
__version__ = "16.1.8"
|
__version__ = "17.0.0"
|
||||||
|
|
||||||
# The version suffix will be appended to the actual version, separated by a
|
# 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
|
# dash. Use this suffix to differentiate between the actual released version and
|
||||||
@ -10,7 +10,7 @@ __version__ = "16.1.8"
|
|||||||
# the nightly branch.
|
# the nightly branch.
|
||||||
# The suffix is cleanly separated from the __version__ in this module to avoid
|
# The suffix is cleanly separated from the __version__ in this module to avoid
|
||||||
# conflicts when merging branches.
|
# conflicts when merging branches.
|
||||||
__version_suffix__ = "nightly"
|
__version_suffix__ = ""
|
||||||
|
|
||||||
# The app name will be used to define the name of the default tutor root and
|
# The app name will be used to define the name of the default tutor root and
|
||||||
# plugin directory. To avoid conflicts between multiple locally-installed
|
# plugin directory. To avoid conflicts between multiple locally-installed
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Note: don't forget to change this when we upgrade from palm
|
# Note: don't forget to change this when we upgrade from quince
|
||||||
OPENEDX_RELEASE_NAMES = [
|
OPENEDX_RELEASE_NAMES = [
|
||||||
"ironwood",
|
"ironwood",
|
||||||
"juniper",
|
"juniper",
|
||||||
@ -7,4 +7,6 @@ OPENEDX_RELEASE_NAMES = [
|
|||||||
"maple",
|
"maple",
|
||||||
"nutmeg",
|
"nutmeg",
|
||||||
"olive",
|
"olive",
|
||||||
|
"palm",
|
||||||
|
"quince",
|
||||||
]
|
]
|
||||||
|
@ -43,6 +43,9 @@ def upgrade_from(context: click.Context, from_release: str) -> None:
|
|||||||
upgrade_from_olive(context, config)
|
upgrade_from_olive(context, config)
|
||||||
running_release = "palm"
|
running_release = "palm"
|
||||||
|
|
||||||
|
if running_release == "palm":
|
||||||
|
running_release = "quince"
|
||||||
|
|
||||||
|
|
||||||
def upgrade_from_ironwood(context: click.Context, config: Config) -> None:
|
def upgrade_from_ironwood(context: click.Context, config: Config) -> None:
|
||||||
click.echo(fmt.title("Upgrading from Ironwood"))
|
click.echo(fmt.title("Upgrading from Ironwood"))
|
||||||
|
@ -42,6 +42,9 @@ def upgrade_from(context: click.Context, from_release: str) -> None:
|
|||||||
upgrade_from_olive(context.obj, config)
|
upgrade_from_olive(context.obj, config)
|
||||||
running_release = "palm"
|
running_release = "palm"
|
||||||
|
|
||||||
|
if running_release == "palm":
|
||||||
|
running_release = "quince"
|
||||||
|
|
||||||
|
|
||||||
def upgrade_from_ironwood(config: Config) -> None:
|
def upgrade_from_ironwood(config: Config) -> None:
|
||||||
upgrade_mongodb(config, "3.4.24", "3.4")
|
upgrade_mongodb(config, "3.4.24", "3.4")
|
||||||
|
@ -153,18 +153,6 @@ def _load_config_defaults_yml(
|
|||||||
return items
|
return items
|
||||||
|
|
||||||
|
|
||||||
@hooks.Filters.CONFIG_DEFAULTS.add()
|
|
||||||
def _set_openedx_common_version_in_nightly(
|
|
||||||
items: list[tuple[str, t.Any]]
|
|
||||||
) -> list[tuple[str, t.Any]]:
|
|
||||||
# REMOVE-AFTER-v16 move this callback to the dedicated openedx/plugin.py module
|
|
||||||
from tutor.__about__ import __version_suffix__
|
|
||||||
|
|
||||||
if __version_suffix__ == "nightly":
|
|
||||||
items.append(("OPENEDX_COMMON_VERSION", "master"))
|
|
||||||
return items
|
|
||||||
|
|
||||||
|
|
||||||
def get_template(filename: str) -> Config:
|
def get_template(filename: str) -> Config:
|
||||||
"""
|
"""
|
||||||
Get one of the configuration templates.
|
Get one of the configuration templates.
|
||||||
|
@ -54,9 +54,6 @@ def _prepare_environment() -> None:
|
|||||||
("HOST_USER_ID", utils.get_user_id()),
|
("HOST_USER_ID", utils.get_user_id()),
|
||||||
("TUTOR_APP", __app__.replace("-", "_")),
|
("TUTOR_APP", __app__.replace("-", "_")),
|
||||||
("TUTOR_VERSION", __version__),
|
("TUTOR_VERSION", __version__),
|
||||||
# BuildKit used to be optional. Now, it's always enabled.
|
|
||||||
# This constant is just for temporary backwards compatibility (REMOVE-AFTER-V16).
|
|
||||||
("is_buildkit_enabled", lambda: True),
|
|
||||||
("is_docker_rootless", utils.is_docker_rootless),
|
("is_docker_rootless", utils.is_docker_rootless),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -460,6 +457,7 @@ def get_release(version: str) -> str:
|
|||||||
"14": "nutmeg",
|
"14": "nutmeg",
|
||||||
"15": "olive",
|
"15": "olive",
|
||||||
"16": "palm",
|
"16": "palm",
|
||||||
|
"17": "quince",
|
||||||
}[version.split(".", maxsplit=1)[0]]
|
}[version.split(".", maxsplit=1)[0]]
|
||||||
|
|
||||||
|
|
||||||
|
@ -334,7 +334,6 @@ class Filters:
|
|||||||
#: - ``HOST_USER_ID``: the numerical ID of the user on the host.
|
#: - ``HOST_USER_ID``: the numerical ID of the user on the host.
|
||||||
#: - ``TUTOR_APP``: the app name ("tutor" by default), used to determine the dev/local project names.
|
#: - ``TUTOR_APP``: the app name ("tutor" by default), used to determine the dev/local project names.
|
||||||
#: - ``TUTOR_VERSION``: the current version of Tutor.
|
#: - ``TUTOR_VERSION``: the current version of Tutor.
|
||||||
#: - ``is_buildkit_enabled``: a deprecated function which always returns ``True`` now. Will be removed after Quince.
|
|
||||||
#: - ``iter_values_named``: a function to iterate on variables that start or end with a given string.
|
#: - ``iter_values_named``: a function to iterate on variables that start or end with a given string.
|
||||||
#: - ``iter_mounts``: a function that yields compose-compatible bind-mounts for any given service.
|
#: - ``iter_mounts``: a function that yields compose-compatible bind-mounts for any given service.
|
||||||
#: - ``iter_mounted_directories``: iterate on bind-mounted directory names.
|
#: - ``iter_mounted_directories``: iterate on bind-mounted directory names.
|
||||||
|
@ -6,6 +6,16 @@ import typing as t
|
|||||||
|
|
||||||
from tutor import bindmount
|
from tutor import bindmount
|
||||||
from tutor import hooks
|
from tutor import hooks
|
||||||
|
from tutor.__about__ import __version_suffix__
|
||||||
|
|
||||||
|
|
||||||
|
@hooks.Filters.CONFIG_DEFAULTS.add()
|
||||||
|
def _set_openedx_common_version_in_nightly(
|
||||||
|
items: list[tuple[str, t.Any]]
|
||||||
|
) -> list[tuple[str, t.Any]]:
|
||||||
|
if __version_suffix__ == "nightly":
|
||||||
|
items.append(("OPENEDX_COMMON_VERSION", "master"))
|
||||||
|
return items
|
||||||
|
|
||||||
|
|
||||||
@hooks.Filters.APP_PUBLIC_HOSTS.add()
|
@hooks.Filters.APP_PUBLIC_HOSTS.add()
|
||||||
|
@ -149,9 +149,11 @@ LOGGING["loggers"]["blockstore.apps.bundles.storage"] = {"handlers": ["console"]
|
|||||||
|
|
||||||
# These warnings are visible in simple commands and init tasks
|
# These warnings are visible in simple commands and init tasks
|
||||||
import warnings
|
import warnings
|
||||||
from django.utils.deprecation import RemovedInDjango40Warning, RemovedInDjango41Warning
|
|
||||||
warnings.filterwarnings("ignore", category=RemovedInDjango40Warning)
|
from django.utils.deprecation import RemovedInDjango50Warning, RemovedInDjango51Warning
|
||||||
warnings.filterwarnings("ignore", category=RemovedInDjango41Warning)
|
warnings.filterwarnings("ignore", category=RemovedInDjango50Warning)
|
||||||
|
warnings.filterwarnings("ignore", category=RemovedInDjango51Warning)
|
||||||
|
|
||||||
warnings.filterwarnings("ignore", category=DeprecationWarning, module="wiki.plugins.links.wiki_plugin")
|
warnings.filterwarnings("ignore", category=DeprecationWarning, module="wiki.plugins.links.wiki_plugin")
|
||||||
warnings.filterwarnings("ignore", category=DeprecationWarning, module="boto.plugin")
|
warnings.filterwarnings("ignore", category=DeprecationWarning, module="boto.plugin")
|
||||||
warnings.filterwarnings("ignore", category=DeprecationWarning, module="botocore.vendored.requests.packages.urllib3._collections")
|
warnings.filterwarnings("ignore", category=DeprecationWarning, module="botocore.vendored.requests.packages.urllib3._collections")
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# syntax=docker/dockerfile:1.4
|
# syntax=docker/dockerfile:1
|
||||||
###### Minimal image with base system requirements for most stages
|
###### Minimal image with base system requirements for most stages
|
||||||
FROM docker.io/ubuntu:20.04 as minimal
|
FROM docker.io/ubuntu:20.04 as minimal
|
||||||
LABEL maintainer="Overhang.io <contact@overhang.io>"
|
LABEL maintainer="Overhang.io <contact@overhang.io>"
|
||||||
@ -24,9 +24,9 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
|||||||
# Install pyenv
|
# Install pyenv
|
||||||
# https://www.python.org/downloads/
|
# https://www.python.org/downloads/
|
||||||
# https://github.com/pyenv/pyenv/releases
|
# https://github.com/pyenv/pyenv/releases
|
||||||
ARG PYTHON_VERSION=3.8.15
|
ARG PYTHON_VERSION=3.8.18
|
||||||
ENV PYENV_ROOT /opt/pyenv
|
ENV PYENV_ROOT /opt/pyenv
|
||||||
RUN git clone https://github.com/pyenv/pyenv $PYENV_ROOT --branch v2.3.17 --depth 1
|
RUN git clone https://github.com/pyenv/pyenv $PYENV_ROOT --branch v2.3.29 --depth 1
|
||||||
|
|
||||||
# Install Python
|
# Install Python
|
||||||
RUN $PYENV_ROOT/bin/pyenv install $PYTHON_VERSION
|
RUN $PYENV_ROOT/bin/pyenv install $PYTHON_VERSION
|
||||||
@ -69,13 +69,12 @@ FROM scratch as mnt-{{ name }}
|
|||||||
|
|
||||||
###### Download extra locales to /openedx/locale/contrib/locale
|
###### Download extra locales to /openedx/locale/contrib/locale
|
||||||
FROM minimal as locales
|
FROM minimal as locales
|
||||||
ARG OPENEDX_I18N_VERSION={{ OPENEDX_COMMON_VERSION }}
|
ARG OPENEDX_I18N_REPOSITORY=https://github.com/openedx/openedx-i18n.git
|
||||||
RUN cd /tmp \
|
ARG OPENEDX_I18N_VERSION=release/quince
|
||||||
&& curl -L -o openedx-i18n.tar.gz https://github.com/openedx/openedx-i18n/archive/$OPENEDX_I18N_VERSION.tar.gz \
|
ADD --keep-git-dir=true $OPENEDX_I18N_REPOSITORY#$OPENEDX_I18N_VERSION /tmp/openedx-i18n
|
||||||
&& tar xzf /tmp/openedx-i18n.tar.gz \
|
RUN mkdir --parents /openedx/locale && \
|
||||||
&& mkdir -p /openedx/locale/contrib \
|
mv /tmp/openedx-i18n/edx-platform/locale /openedx/locale/contrib && \
|
||||||
&& mv openedx-i18n-*/edx-platform/locale /openedx/locale/contrib \
|
rm -rf /tmp/openedx-i18n/
|
||||||
&& rm -rf openedx-i18n*
|
|
||||||
|
|
||||||
###### Install python requirements in virtualenv
|
###### Install python requirements in virtualenv
|
||||||
FROM python as python-requirements
|
FROM python as python-requirements
|
||||||
@ -94,10 +93,7 @@ RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
|||||||
# https://pypi.org/project/setuptools/
|
# https://pypi.org/project/setuptools/
|
||||||
# https://pypi.org/project/pip/
|
# https://pypi.org/project/pip/
|
||||||
# https://pypi.org/project/wheel/
|
# https://pypi.org/project/wheel/
|
||||||
setuptools==67.6.1 pip==23.0.1. wheel==0.40.0
|
setuptools==68.2.2 pip==23.2.1. wheel==0.41.2
|
||||||
|
|
||||||
# Install missing py2neo package that was abruptly trimmed from pypi
|
|
||||||
RUN pip install https://github.com/overhangio/py2neo/releases/download/2021.2.3/py2neo-2021.2.3.tar.gz
|
|
||||||
|
|
||||||
# Install base requirements
|
# Install base requirements
|
||||||
RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt \
|
RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target=/openedx/edx-platform/requirements/edx/base.txt \
|
||||||
@ -108,18 +104,14 @@ RUN --mount=type=bind,from=edx-platform,source=/requirements/edx/base.txt,target
|
|||||||
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
||||||
pip install \
|
pip install \
|
||||||
# Use redis as a django cache https://pypi.org/project/django-redis/
|
# Use redis as a django cache https://pypi.org/project/django-redis/
|
||||||
django-redis==5.2.0 \
|
django-redis==5.4.0 \
|
||||||
# uwsgi server https://pypi.org/project/uWSGI/
|
# uwsgi server https://pypi.org/project/uWSGI/
|
||||||
uwsgi==2.0.21
|
uwsgi==2.0.22
|
||||||
|
|
||||||
{{ patch("openedx-dockerfile-post-python-requirements") }}
|
{{ patch("openedx-dockerfile-post-python-requirements") }}
|
||||||
|
|
||||||
# Install private requirements: this is useful for installing custom xblocks.
|
# Install scorm xblock
|
||||||
COPY ./requirements/ /openedx/requirements
|
RUN pip install "openedx-scorm-xblock>=17.0.0,<18.0.0"
|
||||||
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
|
||||||
cd /openedx/requirements/ \
|
|
||||||
&& touch ./private.txt \
|
|
||||||
&& pip install -r ./private.txt
|
|
||||||
|
|
||||||
{% for extra_requirements in OPENEDX_EXTRA_PIP_REQUIREMENTS %}
|
{% for extra_requirements in OPENEDX_EXTRA_PIP_REQUIREMENTS %}
|
||||||
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
||||||
@ -167,7 +159,6 @@ COPY --chown=app:app --from=edx-platform / /openedx/edx-platform
|
|||||||
COPY --chown=app:app --from=locales /openedx/locale /openedx/locale
|
COPY --chown=app:app --from=locales /openedx/locale /openedx/locale
|
||||||
COPY --chown=app:app --from=python /opt/pyenv /opt/pyenv
|
COPY --chown=app:app --from=python /opt/pyenv /opt/pyenv
|
||||||
COPY --chown=app:app --from=python-requirements /openedx/venv /openedx/venv
|
COPY --chown=app:app --from=python-requirements /openedx/venv /openedx/venv
|
||||||
COPY --chown=app:app --from=python-requirements /openedx/requirements /openedx/requirements
|
|
||||||
COPY --chown=app:app --from=python-requirements /mnt /mnt
|
COPY --chown=app:app --from=python-requirements /mnt /mnt
|
||||||
COPY --chown=app:app --from=nodejs-requirements /openedx/nodeenv /openedx/nodeenv
|
COPY --chown=app:app --from=nodejs-requirements /openedx/nodeenv /openedx/nodeenv
|
||||||
COPY --chown=app:app --from=nodejs-requirements /openedx/edx-platform/node_modules /openedx/node_modules
|
COPY --chown=app:app --from=nodejs-requirements /openedx/edx-platform/node_modules /openedx/node_modules
|
||||||
@ -273,9 +264,9 @@ USER app
|
|||||||
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
||||||
pip install -r requirements/edx/development.txt
|
pip install -r requirements/edx/development.txt
|
||||||
# https://pypi.org/project/ipdb/
|
# https://pypi.org/project/ipdb/
|
||||||
# https://pypi.org/project/ipython
|
# https://pypi.org/project/ipython (8.12.x for Python 3.8)
|
||||||
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
RUN --mount=type=cache,target=/openedx/.cache/pip,sharing=shared \
|
||||||
pip install ipdb==0.13.13 ipython==8.12.0
|
pip install ipdb==0.13.13 ipython==8.12.3
|
||||||
|
|
||||||
{# Re-install mounted requirements, otherwise they will be superseded by upstream reqs #}
|
{# Re-install mounted requirements, otherwise they will be superseded by upstream reqs #}
|
||||||
{% for name in iter_mounted_directories(MOUNTS, "openedx") %}
|
{% for name in iter_mounted_directories(MOUNTS, "openedx") %}
|
||||||
|
@ -1,6 +0,0 @@
|
|||||||
# Add your additional requirements, such as xblocks, to this file. For
|
|
||||||
# requirements coming from private repositories, clone the repository to this
|
|
||||||
# folder and then add your requirement with the `-e` flag. Ex:
|
|
||||||
#
|
|
||||||
# git clone git@myserver:myprivaterepo.git
|
|
||||||
# echo "-e ./myprivaterepo/" >> private.txt
|
|
@ -1 +1 @@
|
|||||||
EDX_PLATFORM_REVISION: palm
|
EDX_PLATFORM_REVISION: quince
|
||||||
|
@ -6,8 +6,9 @@ MYSQL_ROOT_PASSWORD: "{{ 8|random_string }}"
|
|||||||
OPENEDX_MYSQL_PASSWORD: "{{ 8|random_string }}"
|
OPENEDX_MYSQL_PASSWORD: "{{ 8|random_string }}"
|
||||||
OPENEDX_SECRET_KEY: "{{ 24|random_string }}"
|
OPENEDX_SECRET_KEY: "{{ 24|random_string }}"
|
||||||
PLUGINS:
|
PLUGINS:
|
||||||
# The MFE plugin is required
|
# enabled by default
|
||||||
- mfe
|
- mfe
|
||||||
|
- indigo
|
||||||
PLUGIN_INDEXES:
|
PLUGIN_INDEXES:
|
||||||
# Indexes in this list will be suffixed with the Open edX named version and
|
# Indexes in this list will be suffixed with the Open edX named version and
|
||||||
# "plugins.yml". E.g: https://overhang.io/tutor/main/olive/plugins.yml
|
# "plugins.yml". E.g: https://overhang.io/tutor/main/olive/plugins.yml
|
||||||
|
@ -12,12 +12,18 @@ DOCKER_COMPOSE_VERSION: "3.7"
|
|||||||
DOCKER_REGISTRY: "docker.io/"
|
DOCKER_REGISTRY: "docker.io/"
|
||||||
DOCKER_IMAGE_OPENEDX: "{{ DOCKER_REGISTRY }}overhangio/openedx:{{ TUTOR_VERSION }}"
|
DOCKER_IMAGE_OPENEDX: "{{ DOCKER_REGISTRY }}overhangio/openedx:{{ TUTOR_VERSION }}"
|
||||||
DOCKER_IMAGE_OPENEDX_DEV: "openedx-dev:{{ TUTOR_VERSION }}"
|
DOCKER_IMAGE_OPENEDX_DEV: "openedx-dev:{{ TUTOR_VERSION }}"
|
||||||
DOCKER_IMAGE_CADDY: "docker.io/caddy:2.6.4"
|
# https://hub.docker.com/_/caddy/tags
|
||||||
DOCKER_IMAGE_ELASTICSEARCH: "docker.io/elasticsearch:7.17.9"
|
DOCKER_IMAGE_CADDY: "docker.io/caddy:2.7.4"
|
||||||
DOCKER_IMAGE_MONGODB: "docker.io/mongo:4.4.22"
|
# https://hub.docker.com/_/elasticsearch/tags
|
||||||
|
DOCKER_IMAGE_ELASTICSEARCH: "docker.io/elasticsearch:7.17.13"
|
||||||
|
# https://hub.docker.com/_/mongo/tags
|
||||||
|
DOCKER_IMAGE_MONGODB: "docker.io/mongo:4.4.25"
|
||||||
|
# https://hub.docker.com/_/mysql/tags
|
||||||
DOCKER_IMAGE_MYSQL: "docker.io/mysql:8.1.0"
|
DOCKER_IMAGE_MYSQL: "docker.io/mysql:8.1.0"
|
||||||
DOCKER_IMAGE_PERMISSIONS: "{{ DOCKER_REGISTRY }}overhangio/openedx-permissions:{{ TUTOR_VERSION }}"
|
DOCKER_IMAGE_PERMISSIONS: "{{ DOCKER_REGISTRY }}overhangio/openedx-permissions:{{ TUTOR_VERSION }}"
|
||||||
DOCKER_IMAGE_REDIS: "docker.io/redis:7.0.11"
|
# https://hub.docker.com/_/redis/tags
|
||||||
|
DOCKER_IMAGE_REDIS: "docker.io/redis:7.2.1"
|
||||||
|
# https://hub.docker.com/r/devture/exim-relay/tags
|
||||||
DOCKER_IMAGE_SMTP: "docker.io/devture/exim-relay:4.96-r1-0"
|
DOCKER_IMAGE_SMTP: "docker.io/devture/exim-relay:4.96-r1-0"
|
||||||
EDX_PLATFORM_REPOSITORY: "https://github.com/openedx/edx-platform.git"
|
EDX_PLATFORM_REPOSITORY: "https://github.com/openedx/edx-platform.git"
|
||||||
EDX_PLATFORM_VERSION: "{{ OPENEDX_COMMON_VERSION }}"
|
EDX_PLATFORM_VERSION: "{{ OPENEDX_COMMON_VERSION }}"
|
||||||
@ -53,9 +59,8 @@ OPENEDX_LMS_UWSGI_WORKERS: 2
|
|||||||
OPENEDX_MYSQL_DATABASE: "openedx"
|
OPENEDX_MYSQL_DATABASE: "openedx"
|
||||||
OPENEDX_MYSQL_USERNAME: "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 nightly branch
|
||||||
OPENEDX_COMMON_VERSION: "open-release/palm.4"
|
OPENEDX_COMMON_VERSION: "open-release/quince.1"
|
||||||
OPENEDX_EXTRA_PIP_REQUIREMENTS:
|
OPENEDX_EXTRA_PIP_REQUIREMENTS: []
|
||||||
- "openedx-scorm-xblock>=16.0.0,<17.0.0"
|
|
||||||
MYSQL_HOST: "mysql"
|
MYSQL_HOST: "mysql"
|
||||||
MYSQL_PORT: 3306
|
MYSQL_PORT: 3306
|
||||||
MYSQL_ROOT_USERNAME: "root"
|
MYSQL_ROOT_USERNAME: "root"
|
||||||
|
@ -16,8 +16,6 @@ x-openedx-job-service:
|
|||||||
- ../apps/openedx/config:/openedx/config:ro
|
- ../apps/openedx/config:/openedx/config:ro
|
||||||
# theme files
|
# theme files
|
||||||
- ../build/openedx/themes:/openedx/themes
|
- ../build/openedx/themes:/openedx/themes
|
||||||
# editable requirements
|
|
||||||
- ../build/openedx/requirements:/openedx/requirements
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
|
||||||
|
@ -12,8 +12,6 @@ x-openedx-service:
|
|||||||
- ../apps/openedx/config:/openedx/config:ro
|
- ../apps/openedx/config:/openedx/config:ro
|
||||||
# theme files
|
# theme files
|
||||||
- ../build/openedx/themes:/openedx/themes
|
- ../build/openedx/themes:/openedx/themes
|
||||||
# editable requirements
|
|
||||||
- ../build/openedx/requirements:/openedx/requirements
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
permissions:
|
permissions:
|
||||||
|
@ -12,3 +12,7 @@ if [ -d /openedx/data/uploads/ ]; then
|
|||||||
rm -rf /openedx/data/uploads/
|
rm -rf /openedx/data/uploads/
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Create waffle switches to enable some features, if they have not been explicitly defined before
|
||||||
|
# Copy-paste of units in Studio (highly requested new feature, but defaults to off in Quince)
|
||||||
|
(./manage.py cms waffle_flag --list | grep contentstore.enable_copy_paste_units) || ./manage.py lms waffle_flag --create contentstore.enable_copy_paste_units --everyone
|
||||||
|
Loading…
Reference in New Issue
Block a user