Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 14 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "tutor-contrib-codejail"
version = "21.0.1"
version = "22.0.0"
description = "Codejail plugin for Tutor"
readme = "README.md"
license-files = ["LICENSE"]
Expand All @@ -9,7 +9,7 @@ authors = [
]
requires-python = ">=3.10"
dependencies = [
"tutor~=21.0"
"tutor~=22.0"
]
classifiers = [
"Development Status :: 3 - Alpha",
Expand All @@ -34,6 +34,17 @@ codejail = "tutorcodejail.plugin"
module-root = "."
module-name = "tutorcodejail"

[tool.uv.sources]
tutor = {
git = "https://github.com/overhangio/tutor",
rev = "59264ca9f9c6a8e67622ae72080684ffc6ec7e2a", # Verawood
}
tutor-mfe = {
git = "https://github.com/overhangio/tutor-mfe",
rev = "72370dd4ace29e1a7a646da57eabc8e098ecee67", # Verawood
}


[build-system]
requires = ["uv_build>=0.9.5,<0.12.0"]
build-backend = "uv_build"
Expand All @@ -44,6 +55,7 @@ dev = [
"ruff",
"scriv>=1.8.0",
"ty>=0.0.34",
"tutor-mfe",
]

[tool.ruff]
Expand Down
2 changes: 1 addition & 1 deletion tutorcodejail/patches/cms-env
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ENABLE_CODEJAIL_REST_SERVICE: true
CODE_JAIL_REST_SERVICE_HOST: "http://{{ CODEJAIL_HOST }}:8550"
CODE_JAIL_REST_SERVICE_HOST: "http://codejail:8000"
CODE_JAIL_REST_SERVICE_CONNECT_TIMEOUT: 0.5
CODE_JAIL_REST_SERVICE_READ_TIMEOUT: 3.5
52 changes: 6 additions & 46 deletions tutorcodejail/patches/k8s-deployments
Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
---
{% if CODEJAIL_USE_SERVICE_V2 %}
apiVersion: apps/v1
kind: Deployment
metadata:
name: codejailservice
name: codejail
labels:
app.kubernetes.io/name: codejailservice
app.kubernetes.io/name: codejail
spec:
selector:
matchLabels:
app.kubernetes.io/name: codejailservice
app.kubernetes.io/name: codejail
template:
metadata:
labels:
app.kubernetes.io/name: codejailservice
app.kubernetes.io/name: codejail
spec:
securityContext:
appArmorProfile:
type: Localhost
localhostProfile: openedx_codejail_service
containers:
- name: codejailservice
image: {{ CODEJAIL_DOCKER_IMAGE_V2 }}
- name: codejail
image: {{ CODEJAIL_DOCKER_IMAGE }}
ports:
- containerPort: 8550
env:
Expand All @@ -35,45 +34,6 @@ spec:
- name: settings-codejail
configMap:
name: settings-codejail
{% else %}
apiVersion: apps/v1
kind: Deployment
metadata:
name: codejailservice
labels:
app.kubernetes.io/name: codejailservice
spec:
selector:
matchLabels:
app.kubernetes.io/name: codejailservice
template:
metadata:
labels:
app.kubernetes.io/name: codejailservice
spec:
{% if CODEJAIL_ENFORCE_APPARMOR %}
securityContext:
appArmorProfile:
type: Localhost
localhostProfile: docker-edx-sandbox
{% endif %}
containers:
- name: codejailservice
image: {{ CODEJAIL_DOCKER_IMAGE }}
ports:
- containerPort: 8550
env:
- name: FLASK_APP_SETTINGS
value: codejailservice.tutor.ProductionConfig
volumeMounts:
- mountPath: /openedx/codejailservice/codejailservice/tutor.py
name: settings-codejail
subPath: tutor.py
volumes:
- name: settings-codejail
configMap:
name: settings-codejail
{% endif %}
{% if CODEJAIL_ENABLE_K8S_DAEMONSET %}
---
apiVersion: apps/v1
Expand Down
9 changes: 5 additions & 4 deletions tutorcodejail/patches/k8s-services
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@
apiVersion: v1
kind: Service
metadata:
name: codejailservice
name: codejail
labels:
app.kubernetes.io/name: codejailservice
app.kubernetes.io/name: codejail
spec:
type: ClusterIP
ports:
- port: 8550
- port: 8000
protocol: TCP
name: http
selector:
app.kubernetes.io/name: codejailservice
app.kubernetes.io/name: codejail
9 changes: 2 additions & 7 deletions tutorcodejail/patches/kustomization-configmapgenerator
Original file line number Diff line number Diff line change
@@ -1,17 +1,12 @@
- name: codejail-profile
files:
- plugins/codejail/apps/profiles/docker-edx-sandbox.profile
- plugins/codejail/apps/profiles/openedx-codejail-service.profile
options:
labels:
app.kubernetes.io/name: codejail-aa-loader
- name: settings-codejail
- name: codejail-settings
files:
{% if CODEJAIL_USE_SERVICE_V2 %}
- plugins/codejail/apps/codejail-service-v2/tutor.py
{% else %}
- plugins/codejail/apps/codejail/tutor.py
{% endif %}
options:
labels:
app.kubernetes.io/name: codejailservice
app.kubernetes.io/name: codejail
2 changes: 1 addition & 1 deletion tutorcodejail/patches/lms-env
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ENABLE_CODEJAIL_REST_SERVICE: true
CODE_JAIL_REST_SERVICE_HOST: "http://{{ CODEJAIL_HOST }}:8550"
CODE_JAIL_REST_SERVICE_HOST: "http://codejail:8000"
CODE_JAIL_REST_SERVICE_CONNECT_TIMEOUT: 0.5
CODE_JAIL_REST_SERVICE_READ_TIMEOUT: 3.5
8 changes: 0 additions & 8 deletions tutorcodejail/patches/local-docker-compose-dev-services
Original file line number Diff line number Diff line change
@@ -1,8 +0,0 @@
codejailservice:
command: flask run --host 0.0.0.0 --port 8550
environment:
FLASK_ENV: development
FLASK_APP_SETTINGS: codejailservice.tutor.DevelopmentConfig
ports:
- "8550:8550"
restart: unless-stopped
25 changes: 3 additions & 22 deletions tutorcodejail/patches/local-docker-compose-services
Original file line number Diff line number Diff line change
@@ -1,35 +1,16 @@
#############Codejail service
{% if CODEJAIL_USE_SERVICE_V2 %}
codejailservice:
image: {{ CODEJAIL_DOCKER_IMAGE_V2 }}
ports:
- 8550:8550
codejail:
image: {{ CODEJAIL_DOCKER_IMAGE }}
environment:
DJANGO_SETTINGS_MODULE: codejail_service.settings.tutor
security_opt:
- apparmor:openedx_codejail_service
volumes:
- ../plugins/codejail/apps/codejail-service-v2/tutor.py:/app/codejail_service/settings/tutor.py:ro
restart: unless-stopped
depends_on:
codejail-apparmor-loader:
condition: service_completed_successfully
{% else %}
codejailservice:
image: {{ CODEJAIL_DOCKER_IMAGE }}
environment:
FLASK_APP_SETTINGS: codejailservice.tutor.ProductionConfig
{% if CODEJAIL_ENFORCE_APPARMOR %}
security_opt:
- apparmor:docker-edx-sandbox
{% endif %}
volumes:
- ../plugins/codejail/apps/codejail/tutor.py:/openedx/codejailservice/codejailservice/tutor.py:ro
- ../plugins/codejail/apps/codejail/tutor.py:/app/codejail_service/settings/tutor.py:ro
restart: unless-stopped
depends_on:
codejail-apparmor-loader:
condition: service_completed_successfully
{% endif %}

codejail-apparmor-loader:
image: {{ CODEJAIL_APPARMOR_DOCKER_IMAGE }}
Expand Down
87 changes: 34 additions & 53 deletions tutorcodejail/plugin.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import importlib_resources
from tutor import hooks
from tutor.types import Config

from .__about__ import __version__

Expand All @@ -21,18 +20,13 @@
"defaults": {
"APPARMOR_DOCKER_IMAGE": "docker.io/ednxops/codejail_apparmor_loader:apparmor-4",
"DOCKER_IMAGE": f"docker.io/ednxops/codejailservice:{__version__}",
"DOCKER_IMAGE_V2": "{{ CODEJAIL_DOCKER_IMAGE }}-v2",
"ENABLE_K8S_DAEMONSET": False,
"ENFORCE_APPARMOR": True,
"EXTRA_PIP_REQUIREMENTS": [],
"HOST": "codejailservice",
"SANDBOX_PYTHON_VERSION": "3.11.14",
"SERVICE_REPOSITORY": "https://github.com/edunext/codejailservice.git",
"SERVICE_V2_REPOSITORY": "https://github.com/openedx/codejail-service.git",
"SERVICE_V2_VERSION": "{{ OPENEDX_COMMON_VERSION }}",
"SANDBOX_PYTHON_VERSION": "3.12",
"SERVICE_REPOSITORY": "https://github.com/openedx/codejail-service.git",
"SERVICE_VERSION": "{{ OPENEDX_COMMON_VERSION }}",
"SKIP_INIT": False,
"USE_SERVICE_V2": False,
"VERSION": __version__,
},
"overrides": {},
Expand Down Expand Up @@ -71,60 +65,47 @@ def get_apparmor_abi():
]
)

hooks.Filters.IMAGES_BUILD.add_item(
(
"codejail",
("plugins", "codejail", "build", "codejail"),
"{{ CODEJAIL_DOCKER_IMAGE }}",
(),
),
)
hooks.Filters.IMAGES_PULL.add_item(
(
"codejail",
"{{ CODEJAIL_DOCKER_IMAGE }}",
)
)
hooks.Filters.IMAGES_PUSH.add_item(
(
"codejail",
"{{ CODEJAIL_DOCKER_IMAGE }}",
)
)

@hooks.Filters.IMAGES_BUILD.add()
def _build_codejail_images(
images: list[tuple[str, str | tuple[str, ...], str, tuple[str, ...]]],
tutor_config: Config,
):
"""Choose the appropiate build context when using CODEJAIL_USE_SERVICE_V2."""
# TODO: Remove after the Verawood update
if tutor_config.get("CODEJAIL_USE_SERVICE_V2"):
codejail_img = (
"codejail",
"plugins/codejail/build/codejail-service",
"{{ CODEJAIL_DOCKER_IMAGE_V2 }}",
(),
)
else:
codejail_img = (
"codejail",
"plugins/codejail/build/codejail",
"{{ CODEJAIL_DOCKER_IMAGE }}",
(),
)
apparmor_img = (
hooks.Filters.IMAGES_BUILD.add_item(
(
"codejail_apparmor",
("plugins", "codejail", "build", "codejail_apparmor"),
"{{CODEJAIL_APPARMOR_DOCKER_IMAGE}}",
(),
),
)
hooks.Filters.IMAGES_PULL.add_item(
(
"codejail_apparmor",
"{{CODEJAIL_APPARMOR_DOCKER_IMAGE}}",
)

return images + [codejail_img, apparmor_img]


@hooks.Filters.IMAGES_PUSH.add()
def _push_codejail_images(
images: list[tuple[str, str]],
tutor_config: Config,
):
"""Choose the appropiate image tag when using CODEJAIL_USE_SERVICE_V2."""
# TODO: Remove after the Verawood update
if tutor_config.get("CODEJAIL_USE_SERVICE_V2"):
codejail_img = (
"codejail",
"{{ CODEJAIL_DOCKER_IMAGE_V2 }}",
)
else:
codejail_img = (
"codejail",
"{{ CODEJAIL_DOCKER_IMAGE }}",
)
apparmor_img = (
)
hooks.Filters.IMAGES_PUSH.add_item(
(
"codejail_apparmor",
"{{CODEJAIL_APPARMOR_DOCKER_IMAGE}}",
)
return images + [codejail_img, apparmor_img]
)


# Boilerplate code
Expand Down

This file was deleted.

Loading