mirror of
https://github.com/ChristianLight/tutor.git
synced 2024-09-28 04:09:01 +00:00
947b37524f
To achieve that, we introduce a new IMAGES_BUILD_REQUIRED filter.
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
import click
|
|
|
|
from tutor import env as tutor_env
|
|
from tutor import hooks
|
|
from tutor.commands import compose
|
|
from tutor.types import Config, get_typed
|
|
|
|
|
|
class LocalTaskRunner(compose.ComposeTaskRunner):
|
|
def __init__(self, root: str, config: Config):
|
|
"""
|
|
Load docker-compose files from local/.
|
|
"""
|
|
super().__init__(root, config)
|
|
self.project_name = get_typed(self.config, "LOCAL_PROJECT_NAME", str)
|
|
self.docker_compose_files += [
|
|
tutor_env.pathjoin(self.root, "local", "docker-compose.yml"),
|
|
tutor_env.pathjoin(self.root, "local", "docker-compose.prod.yml"),
|
|
tutor_env.pathjoin(self.root, "local", "docker-compose.override.yml"),
|
|
]
|
|
self.docker_compose_job_files += [
|
|
tutor_env.pathjoin(self.root, "local", "docker-compose.jobs.yml"),
|
|
tutor_env.pathjoin(self.root, "local", "docker-compose.jobs.override.yml"),
|
|
]
|
|
|
|
|
|
# pylint: disable=too-few-public-methods
|
|
class LocalContext(compose.BaseComposeContext):
|
|
NAME = "local"
|
|
|
|
def job_runner(self, config: Config) -> LocalTaskRunner:
|
|
return LocalTaskRunner(self.root, config)
|
|
|
|
|
|
@click.group(help="Run Open edX locally with docker-compose")
|
|
@click.pass_context
|
|
def local(context: click.Context) -> None:
|
|
context.obj = LocalContext(context.obj.root)
|
|
|
|
|
|
@hooks.Actions.COMPOSE_PROJECT_STARTED.add()
|
|
def _stop_on_dev_start(root: str, config: Config, project_name: str) -> None:
|
|
"""
|
|
Stop the local platform as soon as a platform with a different project name is
|
|
started.
|
|
"""
|
|
runner = LocalTaskRunner(root, config)
|
|
if project_name != runner.project_name:
|
|
runner.docker_compose("stop")
|
|
|
|
|
|
compose.add_commands(local)
|