From b1cc74368a745fa75558a98b2190b67f514e3509 Mon Sep 17 00:00:00 2001 From: Muhammad Farhan Date: Wed, 6 Nov 2024 12:21:43 +0500 Subject: [PATCH 1/4] feat: set edx.org theme as default for edx-platform and MFEs in devstack provisioning --- microfrontend.yml | 2 +- options.mk | 5 ++++ provision-lms.sh | 3 +++ provision-set-edx-theme.sh | 47 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 56 insertions(+), 1 deletion(-) create mode 100755 provision-set-edx-theme.sh diff --git a/microfrontend.yml b/microfrontend.yml index 184944a5..7e726684 100644 --- a/microfrontend.yml +++ b/microfrontend.yml @@ -16,7 +16,7 @@ services: # # Fail fast if package install fails to avoid mysterious # errors later. - command: bash -c 'npm ci || exit 1; while true; do npm start; sleep 2; done' + command: bash -c 'npm ci || exit 1; if [ ! -z "$PARAGON_BRAND_PACKAGE" ]; then npx paragon install-theme "@$PARAGON_BRAND_PACKAGE" || exit 1; fi; while true; do npm start; sleep 2; done' stdin_open: true tty: true image: node:18 diff --git a/options.mk b/options.mk index 5a4d9b4e..4ae3a476 100644 --- a/options.mk +++ b/options.mk @@ -91,3 +91,8 @@ credentials+cms+discovery+ecommerce+insights+lms+registrar # Separated by plus signs. Listed in alphabetical order for clarity. THIRD_PARTY_SERVICES ?= \ chrome+coursegraph+elasticsearch710+firefox+memcached+mongo+mysql57+mysql80+opensearch12+redis+namenode+datanode+resourcemanager+nodemanager+sparkmaster+sparkworker+vertica + +# Set default theme for MFEs +ifndef PARAGON_BRAND_PACKAGE + PARAGON_BRAND_PACKAGE = edx/brand-edx.org +endif diff --git a/provision-lms.sh b/provision-lms.sh index 184be241..2182455d 100755 --- a/provision-lms.sh +++ b/provision-lms.sh @@ -77,6 +77,9 @@ done # Fix missing vendor file by clearing the cache # docker compose exec -T lms bash -e -c 'rm /edx/app/edxapp/edx-platform/.prereqs_cache/Node_prereqs.sha1' +# Set edX theme in LMS and CMS. +./provision-set-edx-theme.sh + # Create static assets for both LMS and CMS for app in "${apps[@]}"; do make "dev.static.$app" diff --git a/provision-set-edx-theme.sh b/provision-set-edx-theme.sh new file mode 100755 index 00000000..d1be7015 --- /dev/null +++ b/provision-set-edx-theme.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash + +# This script sets up the edX theme in LMS and CMS. + +REPO_URL="https://github.com/edx/edx-themes" +THEME_DIR="/edx/src/edx-themes/edx-platform" +DEVSTACK_FILE="../edx-platform/lms/envs/devstack.py" + +# Clone the edx-themes repository into the src directory +cd ../src +if [ ! -d "edx-themes" ]; then + git clone "$REPO_URL" +else + echo "Directory 'edx-themes' already exists. Skipping clone." +fi +cd ../devstack + +# Uncomment relevant lines in the devstack.py file +sed -i '' "s|^# from .common import _make_mako_template_dirs|from .common import _make_mako_template_dirs|" "$DEVSTACK_FILE" +sed -i '' "s|^# ENABLE_COMPREHENSIVE_THEMING = True|ENABLE_COMPREHENSIVE_THEMING = True|" "$DEVSTACK_FILE" +sed -i '' "s|^# COMPREHENSIVE_THEME_DIRS = \[|COMPREHENSIVE_THEME_DIRS = \[|" "$DEVSTACK_FILE" +sed -i '' "s|^# \"/edx/app/edxapp/edx-platform/themes/\"| \"/edx/app/edxapp/edx-platform/themes/\",|" "$DEVSTACK_FILE" +sed -i '' "/COMPREHENSIVE_THEME_DIRS = \[/a\\ +\"$THEME_DIR\", +" "$DEVSTACK_FILE" +sed -i '' "s|^# \]|]|" "$DEVSTACK_FILE" # Uncomment the closing bracket +sed -i '' "s|^# TEMPLATES\[1\]\[\"DIRS\"\] = _make_mako_template_dirs|TEMPLATES[1][\"DIRS\"] = _make_mako_template_dirs|" "$DEVSTACK_FILE" +sed -i '' "s|^# derive_settings(__name__)|derive_settings(__name__)|" "$DEVSTACK_FILE" + + +# Add the theme directory to COMPREHENSIVE_THEME_DIRS if not already present +if ! grep -qF "$THEME_DIR" "$DEVSTACK_FILE"; then + sed -i '' "/COMPREHENSIVE_THEME_DIRS = \[/a\\ + \"$THEME_DIR\", + " "$DEVSTACK_FILE" +fi + +# Set the theme site-wide +SERVICE_NAME="mysql80" +DATABASE="edxapp" +THEME_NAME="edx.org-next" +SITE_ID=1 + +docker compose exec -T "$SERVICE_NAME" mysql -e " +USE $DATABASE; +INSERT INTO theming_sitetheme (theme_dir_name, site_id) VALUES ('$THEME_NAME', $SITE_ID); +" From b2d14841761130cce3403991e1147a57c7e3b575 Mon Sep 17 00:00:00 2001 From: Muhammad Farhan Date: Thu, 14 Nov 2024 20:33:55 +0500 Subject: [PATCH 2/4] feat: Enable per-MFE PARAGON_BRAND_PACKAGE for theme versioning --- docker-compose.yml | 26 ++++++++++++++++++++++++++ microfrontend.yml | 13 ++++++++++++- options.mk | 5 ----- provision-set-edx-theme.sh | 2 +- 4 files changed, 39 insertions(+), 7 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index a165a6bf..09409b12 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -707,6 +707,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-account' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-account" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -722,6 +724,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-profile' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-profile" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -737,6 +741,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-authn' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-authn" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -752,6 +758,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-course-authoring' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-course-authoring" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -767,6 +775,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-gradebook' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-gradebook" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -782,6 +792,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-ora-grading' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-ora-grading" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -797,6 +809,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-learner-dashboard' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-learner-dashboard" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -812,6 +826,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-learner-record' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-learner-record" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -827,6 +843,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-learning' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-learning" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.1.3' networks: default: aliases: @@ -842,6 +860,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-library-authoring' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-library-authoring" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -858,6 +878,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-payment' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-payment" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -873,6 +895,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-program-console' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-program-console" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -889,6 +913,8 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-publisher' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-publisher" + environment: + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: diff --git a/microfrontend.yml b/microfrontend.yml index 7e726684..cd3c889d 100644 --- a/microfrontend.yml +++ b/microfrontend.yml @@ -16,7 +16,18 @@ services: # # Fail fast if package install fails to avoid mysterious # errors later. - command: bash -c 'npm ci || exit 1; if [ ! -z "$PARAGON_BRAND_PACKAGE" ]; then npx paragon install-theme "@$PARAGON_BRAND_PACKAGE" || exit 1; fi; while true; do npm start; sleep 2; done' + command: + - bash + - -c + - | + npm ci || exit 1 + if [ -n "$(printenv PARAGON_BRAND_PACKAGE)" ]; then + npx paragon install-theme "$(printenv PARAGON_BRAND_PACKAGE)" || exit 1 + fi + while true; do + npm start + sleep 2 + done stdin_open: true tty: true image: node:18 diff --git a/options.mk b/options.mk index 4ae3a476..5a4d9b4e 100644 --- a/options.mk +++ b/options.mk @@ -91,8 +91,3 @@ credentials+cms+discovery+ecommerce+insights+lms+registrar # Separated by plus signs. Listed in alphabetical order for clarity. THIRD_PARTY_SERVICES ?= \ chrome+coursegraph+elasticsearch710+firefox+memcached+mongo+mysql57+mysql80+opensearch12+redis+namenode+datanode+resourcemanager+nodemanager+sparkmaster+sparkworker+vertica - -# Set default theme for MFEs -ifndef PARAGON_BRAND_PACKAGE - PARAGON_BRAND_PACKAGE = edx/brand-edx.org -endif diff --git a/provision-set-edx-theme.sh b/provision-set-edx-theme.sh index d1be7015..44b22f39 100755 --- a/provision-set-edx-theme.sh +++ b/provision-set-edx-theme.sh @@ -23,7 +23,7 @@ sed -i '' "s|^# \"/edx/app/edxapp/edx-platform/themes/\"| \"/edx/app/edxa sed -i '' "/COMPREHENSIVE_THEME_DIRS = \[/a\\ \"$THEME_DIR\", " "$DEVSTACK_FILE" -sed -i '' "s|^# \]|]|" "$DEVSTACK_FILE" # Uncomment the closing bracket +sed -i '' "s|^# \]|]|" "$DEVSTACK_FILE" sed -i '' "s|^# TEMPLATES\[1\]\[\"DIRS\"\] = _make_mako_template_dirs|TEMPLATES[1][\"DIRS\"] = _make_mako_template_dirs|" "$DEVSTACK_FILE" sed -i '' "s|^# derive_settings(__name__)|derive_settings(__name__)|" "$DEVSTACK_FILE" From d0948d46b7e986795dc1d7bedfb62688610c66b1 Mon Sep 17 00:00:00 2001 From: Muhammad Farhan Date: Tue, 19 Nov 2024 23:44:58 +0500 Subject: [PATCH 3/4] chore: update edx/brand versions for MFEs --- docker-compose.yml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 09409b12..6e5d2b45 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -708,7 +708,7 @@ services: working_dir: '/edx/app/frontend-app-account' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-account" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@@1.x' networks: default: aliases: @@ -742,7 +742,7 @@ services: working_dir: '/edx/app/frontend-app-authn' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-authn" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@~2.0.0' networks: default: aliases: @@ -790,7 +790,7 @@ services: extends: file: microfrontend.yml service: microfrontend - working_dir: '/edx/app/frontend-app-ora-grading' + working_dir: '/edx/app/frontend-app-ora-grading@2.x' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-ora-grading" environment: PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' @@ -810,7 +810,7 @@ services: working_dir: '/edx/app/frontend-app-learner-dashboard' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-learner-dashboard" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: @@ -827,7 +827,7 @@ services: working_dir: '/edx/app/frontend-app-learner-record' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-learner-record" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@~2.0.0' networks: default: aliases: @@ -844,7 +844,7 @@ services: working_dir: '/edx/app/frontend-app-learning' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-learning" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.1.3' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: @@ -879,7 +879,7 @@ services: working_dir: '/edx/app/frontend-app-payment' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-payment" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@^2.0.6' networks: default: aliases: @@ -896,7 +896,7 @@ services: working_dir: '/edx/app/frontend-app-program-console' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-program-console" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@1.x' networks: default: aliases: @@ -914,7 +914,7 @@ services: working_dir: '/edx/app/frontend-app-publisher' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-publisher" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: From e2e7a6270268a71709e47534cfa84e0ca5b2369a Mon Sep 17 00:00:00 2001 From: Muhammad Farhan Date: Thu, 19 Dec 2024 13:19:17 +0500 Subject: [PATCH 4/4] chore: update edx/brand versions for multiple MFEs --- docker-compose.yml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 6e5d2b45..94f35af9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -708,7 +708,7 @@ services: working_dir: '/edx/app/frontend-app-account' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-account" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@@1.x' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@1.x' networks: default: aliases: @@ -725,7 +725,7 @@ services: working_dir: '/edx/app/frontend-app-profile' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-profile" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@~2.0.0' networks: default: aliases: @@ -742,7 +742,7 @@ services: working_dir: '/edx/app/frontend-app-authn' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-authn" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@~2.0.0' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: @@ -759,7 +759,7 @@ services: working_dir: '/edx/app/frontend-app-course-authoring' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-course-authoring" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: @@ -775,8 +775,6 @@ services: service: microfrontend working_dir: '/edx/app/frontend-app-gradebook' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-gradebook" - environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' networks: default: aliases: @@ -790,10 +788,10 @@ services: extends: file: microfrontend.yml service: microfrontend - working_dir: '/edx/app/frontend-app-ora-grading@2.x' + working_dir: '/edx/app/frontend-app-ora-grading' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-ora-grading" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: @@ -861,7 +859,7 @@ services: working_dir: '/edx/app/frontend-app-library-authoring' container_name: "edx.${COMPOSE_PROJECT_NAME:-devstack}.frontend-app-library-authoring" environment: - PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org' + PARAGON_BRAND_PACKAGE: '@edx/brand-edx.org@2.x' networks: default: aliases: