diff --git a/dockerfiles/openedx-edxapp/pip_package_lists/master/mitxonline.txt b/dockerfiles/openedx-edxapp/pip_package_lists/master/mitxonline.txt index a72bd67cfa..440ff6688e 100644 --- a/dockerfiles/openedx-edxapp/pip_package_lists/master/mitxonline.txt +++ b/dockerfiles/openedx-edxapp/pip_package_lists/master/mitxonline.txt @@ -1,7 +1,7 @@ celery-redbeat==2.3.3 # Support for using Redis as the lock for Celery schedules granian==2.6.0 django-redis==6.0.0 -ol-openedx-git-auto-export==0.6.0 +ol-openedx-git-auto-export==0.7.0 edx-sysadmin==0.4.0 edx-username-changer==0.5.0 openedx-companion-auth==1.2.0 diff --git a/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/cms_only.yml.tmpl b/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/cms_only.yml.tmpl index c890d81f19..8050deb770 100644 --- a/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/cms_only.yml.tmpl +++ b/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/cms_only.yml.tmpl @@ -1,7 +1,11 @@ # -*- mode: yaml -*- # ALTERNATE_WORKER_QUEUES: lms # Already has a sane default in the code + + COURSE_AUTHORING_MICROFRONTEND_URL: /authoring DISCUSSIONS_INCONTEXT_LEARNMORE_URL: https://openedx.atlassian.net/wiki/spaces/COMM/pages/3470655498/Discussions+upgrade+Sidebar+and+new+topic+structure + +GITHUB_ORG_API_URL: {{ key "edxapp/github-auto-export-org-api-url" }} GIT_REPO_EXPORT_DIR: /openedx/data/export_course_repos GIT_EXPORT_DEFAULT_IDENT: name: MITx Online @@ -10,10 +14,13 @@ GIT_EXPORT_DEFAULT_IDENT: PARSE_KEYS: {} REDBEAT_KEY_PREFIX: redbeat_cms # ADDED - RedBeat key prefix to separate LMS and CMS schedules SITE_NAME: {{ key "edxapp/studio-domain" }} # MODIFIED + {{ with secret "secret-mitxonline/edxapp" }} +GITHUB_ACCESS_TOKEN: {{ .Data.github_access_token }} SOCIAL_AUTH_EDX_OAUTH2_KEY: {{ .Data.studio_oauth_client.id }} SOCIAL_AUTH_EDX_OAUTH2_SECRET: {{ .Data.studio_oauth_client.secret }} {{ end }} + SOCIAL_AUTH_EDX_OAUTH2_URL_ROOT: https://{{ key "edxapp/lms-domain" }} # possibly same as public LMS root URL SOCIAL_AUTH_EDX_OAUTH2_PUBLIC_URL_ROOT: https://{{ key "edxapp/lms-domain" }} SESSION_COOKIE_NAME: {{ env "ENVIRONMENT" }}-edx-studio-sessionid # MODIFIED diff --git a/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/common_values.yml.tmpl b/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/common_values.yml.tmpl index 2b18249fec..55ec399dda 100644 --- a/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/common_values.yml.tmpl +++ b/src/bilder/images/edxapp_v2/templates/edxapp/mitxonline/common_values.yml.tmpl @@ -330,6 +330,7 @@ FEATURES: ENABLE_ENROLLMENT_RESET: false ENABLE_EXAM_SETTINGS_HTML_VIEW: true # ADDED KEY ENABLE_EXPORT_GIT: true # MODIFIED + ENABLE_AUTO_GITHUB_REPO_CREATION: true ENABLE_FORUM_DAILY_DIGEST: true ENABLE_GIT_AUTO_EXPORT: true # ADDED KEY ENABLE_GRADE_DOWNLOADS: true diff --git a/src/bridge/secrets/edxapp/mitxonline.ci.yaml b/src/bridge/secrets/edxapp/mitxonline.ci.yaml index 1801608c31..d43ea58d79 100644 --- a/src/bridge/secrets/edxapp/mitxonline.ci.yaml +++ b/src/bridge/secrets/edxapp/mitxonline.ci.yaml @@ -18,19 +18,24 @@ studio_oauth_client: user_retirement_salts: - ENC[AES256_GCM,data:hQcHuunoj2NaLjFbKcITgziJHzRpgf9b43T5D44uudZk08d957ZkiFLI7g==,iv:/lsiiZYXvJN+HTO9cDm1UTXmpRet2nM2E2OXG/xScMc=,tag:CRIoAnBGf4skrqm5PBKlYA==,type:str] sysadmin_git_webhook_secret: ENC[AES256_GCM,data:3faJ7pjORmlsGSqn4oYmzN/TznQSzduotNmYgHlQLwJpYY6Z21Zx6OQvsw==,iv:vYrfFB2dG1jK1UaJDn8BF+tST3IFCoyn6houoF5v/6Q=,tag:I1jEniI6SEvexcmtIlF44Q==,type:str] +github_access_token: ENC[AES256_GCM,data:LqL2Z8VdkYE/tVee2xknh1q4zsKXHF/Hk0szhWgVLJQtkGOGJfVZ5w==,iv:90Xn7bCFDuWA+oS3xyqU5fwcbGpz8wkauNXnhc8JClY=,tag:jdaj74j77j7/64pUqIhUxg==,type:str] sops: kms: - arn: arn:aws:kms:us-east-1:610119931565:alias/infrastructure-secrets-ci created_at: "2025-08-28T20:35:02Z" enc: AQICAHi3MZ/Pjy2dahB1Qm+zKkKDPV1b9MYPGp7k649HPjmOHAHlqCRlxIfgpLm8bF77GeFQAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM+8/juNZp/oUFKTgaAgEQgDuDSA4KTjEQVCLPa8Txo55rBIDSCzCvas0Kca8QUvtVGQ6IlPtKGiftrQ5UD/VxX56lOqJd04shL814HA== aws_profile: "" + gcp_kms: [] + azure_kv: [] hc_vault: - vault_address: https://vault-ci.odl.mit.edu engine_path: infrastructure key_name: sops created_at: "2025-08-28T20:35:02Z" enc: vault:v1:hLtAum4sTZQgTXdhB78kGsXPj2m02TYFy2pu8dVo/akd0tPpmEzN8/ax0iypvf7anxbrMTCXAMNEm2Uv - lastmodified: "2025-08-28T20:35:02Z" - mac: ENC[AES256_GCM,data:jEkqi+ujvIcQOsmXmPURBqWtWhp5KAFbErPWXikLGiyJ2vrfEVFpCYFU9NwIJ4iXB40//u8gK/3TKV7MbWs9GS0FZ8D2dG45LozMQnkGSDJ4HvM4lt1lO3djhXOPDJWu5/LCzu6NjbW+EPQh3ESzkqVILJLCweKLltHus9Hbhbs=,iv:2UILOyoBPduoPFPKjeEKXuUlmioBRKc5f8iFzskCAxk=,tag:ysKjIN+CLRTals2Fq+PXsg==,type:str] + age: [] + lastmodified: "2025-11-13T15:26:01Z" + mac: ENC[AES256_GCM,data:Fhbnp/V/sKBIWDrOp5wNJW8r0JYfqLW7L0hy0hfHnWr/voxpZYec9caaS8RU9uFMPII7496+SCFSB5cc9IA6A0/JIEtIoAqTWFSQNT1rwewXwK5RdFaSreZvJxWFaHhIYqp36bmsyJdF3+//6cFjH/4P8Ea1nkZwanWQo7q3zJ4=,iv:SlFYFtpTnNXR1jsJT9kKeFst7fxUFaMy1JMA0/MbtWo=,tag:bbqerzwlRVMWQNTjmuoO6w==,type:str] + pgp: [] unencrypted_suffix: _unencrypted version: 3.10.2 diff --git a/src/bridge/secrets/edxapp/mitxonline.production.yaml b/src/bridge/secrets/edxapp/mitxonline.production.yaml index 70e62b6f47..40501c9d39 100644 --- a/src/bridge/secrets/edxapp/mitxonline.production.yaml +++ b/src/bridge/secrets/edxapp/mitxonline.production.yaml @@ -18,19 +18,24 @@ studio_oauth_client: user_retirement_salts: - ENC[AES256_GCM,data:5ls/ESoE0X+ZL3L6w0ujhXMN/8GziE83Xws9x5ColWbA4MtyYwJOLFdpjw==,iv:xFrLPgEM/0/I/6lcypBh01uK3qsaHMJexxgfnPdYZlA=,tag:5CyOpBkGdD7BcEqBIROJeg==,type:str] sysadmin_git_webhook_secret: ENC[AES256_GCM,data:Fuyd/DtfUKciAxnnnblaOFShf2QtLdR52GAV+NJPKTvXA0+Hp7AbtYPG4Q==,iv:TCF/wa3oL8CDUjIJCKlxUDlUjZBCIq9zHKoZN7Clf/Q=,tag:tMp3H/Z0Vm1Nv2CkruMjBQ==,type:str] +github_access_token: ENC[AES256_GCM,data:IpSYM2aLXm07wLV2n9HOPBT9U7PQeibq5whCtYmSdwP4a4LzKKQc9A==,iv:oq2hYxHs+WBAOD6zDqojtxFDQT/RV3iRnIb6TugbjVY=,tag:Mo99NgZZ3v9UzW0CpNHZkQ==,type:str] sops: kms: - arn: arn:aws:kms:us-east-1:610119931565:alias/infrastructure-secrets-production created_at: "2025-08-28T20:36:45Z" enc: AQICAHi3FG4qowC3UzOLWOAA4Y9/RTwqKjovG3wyVVYDxkR+zAESwreODlY1Cryss8WrDyzIAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQM54M+6yqf1cGrG8IZAgEQgDutGvIcCiKFmSfgfHds+ul53Z/f6ZCI75bM0txOvD36tG4uyK7aaQMwNX4cb20vRGl3qom06po1FFShWA== aws_profile: "" + gcp_kms: [] + azure_kv: [] hc_vault: - vault_address: https://vault-production.odl.mit.edu engine_path: infrastructure key_name: sops created_at: "2025-08-28T20:36:45Z" enc: vault:v1:wySAGYErO7ejAr61t8fYz2kui0WTaV8k5RixzlexIp4qrcwA4Z2Dn0lbLGxS9/ot8LuX+cOZJdw1K3dH - lastmodified: "2025-08-28T20:36:45Z" - mac: ENC[AES256_GCM,data:Dk3/SEd22b7TEX8B9u8x+84B5KPf68JTMuBMDGq41rNrWSKYB9D1f3FAybk3OUTy+l5LobU7x6mUZnX93I6wYDwIwjyAtA4v94qTOPmAwGFZb9YtWoviRdmYun5nUxDmQgz9haImppdmNptXthjncf3h18H+eAtkXuMB4OsHZDw=,iv:O1vJeWrpgtqQFxsHUZ/WlTUlh4KCOs0YZkZonwK+fWo=,tag:6DyXt0Ge+fudn+vs6aQ1IQ==,type:str] + age: [] + lastmodified: "2025-11-13T15:26:18Z" + mac: ENC[AES256_GCM,data:M0jxh56tHmK3cfDEsTnbCiL9LPOKpk+TZsucd9p2N0w1FlyzRc/XDjYjxtSCbpkX4gMRBGs63HjRC+d5PfYavgMhSpI4uI2QeiYEKwCVlekTTRJHyNNegTsTTFZiko3XC1DZ689LCWIMocpgiwJHWrcIc9nsPJugRyweFzVeR+4=,iv:Oon53GjlNs+QWoy5ParDMOlYZxqBBFEtencekKO/0y4=,tag:aWMpWXGnK8PhC7iO6UyuAA==,type:str] + pgp: [] unencrypted_suffix: _unencrypted version: 3.10.2 diff --git a/src/bridge/secrets/edxapp/mitxonline.qa.yaml b/src/bridge/secrets/edxapp/mitxonline.qa.yaml index caf0eccdfc..6d475d8497 100644 --- a/src/bridge/secrets/edxapp/mitxonline.qa.yaml +++ b/src/bridge/secrets/edxapp/mitxonline.qa.yaml @@ -18,19 +18,24 @@ studio_oauth_client: user_retirement_salts: - ENC[AES256_GCM,data:h44hRp6zDRSlsmM4F0vstHQiBDHZPNPr2kkX8Wc1q4hK9W2bnF1o0194Mw==,iv:aDgMhQYIUDECB+WUXA3VQgCfoggtaf53yN+POC6SHds=,tag:+1aZJmUSJCAX+LeNjgzang==,type:str] sysadmin_git_webhook_secret: ENC[AES256_GCM,data:PhMN34W7Qo2gOqn6dv+/Ub9js0qkU2md3Xc8nNHMw20av2oASZ9q9pMVT9I=,iv:XNHKK6GBBQAPS9Dvs4IpGKQnITAZsYV6YurI6Gm8bLU=,tag:eT/rGRE5MGfcA8C9QxvG6Q==,type:str] +github_access_token: ENC[AES256_GCM,data:/SSl2vkAokfhMpFOaDqHj0G8foRZnSihRUVZtKxo0PMYVADYRk9ESA==,iv:Y2VeVVH46SzF2N116NzkAZXP7AJMvMLeq7X8R5vAQtY=,tag:fIeTD2q+SCMnCjvS1HcWCA==,type:str] sops: kms: - arn: arn:aws:kms:us-east-1:610119931565:alias/infrastructure-secrets-qa created_at: "2025-08-28T20:37:22Z" enc: AQICAHjZAY5LtmRWGljev0oiDGn0jR5cRwD4IVXCn50TW5i0qQECb3uGmATbrEE+B6xsVQT+AAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMft5GBa2P5vK52JQsAgEQgDvS/SL4r/yZtgkDuhb90XnqDrfgpAP1+5FnqhTiVLv9fZ9ifhtSMw5GdHQgv1iyiMyBnofkQejlJQkJ6Q== aws_profile: "" + gcp_kms: [] + azure_kv: [] hc_vault: - vault_address: https://vault-qa.odl.mit.edu engine_path: infrastructure key_name: sops created_at: "2025-08-28T20:37:22Z" enc: vault:v1:myA322x4V71XWIYseRNjdHuJMe9sPAKQ3rQrPF95bzQ34WselInLQ4nVNGeBy7HY+4wVTg2vUBnAce4Z - lastmodified: "2025-08-28T20:37:22Z" - mac: ENC[AES256_GCM,data:CKPVduldwZ1rJBm+gPl+W+xYC4KJQymRWER/4w03pBNgiCN/YRfO/D8D59M+IbtPvDZnz34c7yH/l62OyLBmH291b2tMkzH94/xdhiIXdsbykK5Vm03WoOQVoiz+VAVhRJRX6lB8jJU0uGgLL4v+3fFeGdrTLpbm8KPKNFwLjWE=,iv:2U8ZHXuwfASbk1ffvhO0JKBIgtV4s9E+nYeWZxS8GEM=,tag:FQHtwo7znyIoKDW/podV1g==,type:str] + age: [] + lastmodified: "2025-11-13T15:26:57Z" + mac: ENC[AES256_GCM,data:KsO32PCfOixHolEQ6NvCcWU4kLmiltB402pmr3lvg+rGjzSDWI6IgFfEhfWRgBO4kCVezQbOyWlS77pHYUokv0tfmGAjB+VpUYgX5lLwosgga3lamDWDdTXEU+ILxSVOHAjOfeQqg55CxNuE1MzIfuUleMDIsbQ2VSw476fOgXI=,iv:5A0bKSSsk8eHCBp2TDgHC3tUKwsiBtGwaLgohRCwQhQ=,tag:aVRv+GXIWEJdnO82Eduwbg==,type:str] + pgp: [] unencrypted_suffix: _unencrypted version: 3.10.2 diff --git a/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.CI.yaml b/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.CI.yaml index c07622afb0..2574c6c1f1 100644 --- a/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.CI.yaml +++ b/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.CI.yaml @@ -76,6 +76,7 @@ config: gradebook: gradebook learning: learn ora_grading: ora-grading + edxapp:github_org_api_url: https://github.mit.edu/api/v3/orgs/mitxonline-rc edxapp:google_analytics_id: "" edxapp:elb_healthcheck_interval: '30' edxapp:mail_domain: edxapp-mail.ci.learn.mit.edu diff --git a/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.Production.yaml b/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.Production.yaml index c480cf9cd8..2ee97d1cf4 100644 --- a/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.Production.yaml +++ b/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.Production.yaml @@ -76,6 +76,7 @@ config: gradebook: gradebook learning: learn ora_grading: ora-grading + edxapp:github_org_api_url: https://github.mit.edu/api/v3/orgs/mitxonline edxapp:google_analytics_id: UA-5145472-48 edxapp:mail_domain: edxapp-mail.learn.mit.edu edxapp:proctortrack_url: https://testing.verificient.com diff --git a/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.QA.yaml b/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.QA.yaml index ce9fb1542c..c2b04402a6 100644 --- a/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.QA.yaml +++ b/src/ol_infrastructure/applications/edxapp/Pulumi.applications.edxapp.mitxonline.QA.yaml @@ -77,6 +77,7 @@ config: gradebook: gradebook learning: learn ora_grading: ora-grading + edxapp:github_org_api_url: https://github.mit.edu/api/v3/orgs/mitxonline-rc edxapp:google_analytics_id: UA-5145472-46 edxapp:mail_domain: edxapp-mail.rc.learn.mit.edu edxapp:proctortrack_url: "https://preproduction.verificient.com" diff --git a/src/ol_infrastructure/applications/edxapp/__main__.py b/src/ol_infrastructure/applications/edxapp/__main__.py index af147e5bee..1b5bc22744 100644 --- a/src/ol_infrastructure/applications/edxapp/__main__.py +++ b/src/ol_infrastructure/applications/edxapp/__main__.py @@ -1167,6 +1167,7 @@ def cloud_init_user_data_func( "default-module-class": edxapp_config.get("default_module_class") or "xmodule.hidden_block.HiddenBlock", "google-analytics-id": edxapp_config.require("google_analytics_id"), + "github-auto-export-org-api-url": edxapp_config.require("github_org_api_url"), "lms-domain": edxapp_domains["lms"], "marketing-domain": edxapp_config.get("marketing_domain") or "", "mitxonline-domain": edxapp_config.get("mitxonline_domain") or "", diff --git a/src/ol_infrastructure/applications/edxapp/files/edxapp/mitxonline/50-general-config.yaml b/src/ol_infrastructure/applications/edxapp/files/edxapp/mitxonline/50-general-config.yaml index 4a4c88d659..f623a936d0 100644 --- a/src/ol_infrastructure/applications/edxapp/files/edxapp/mitxonline/50-general-config.yaml +++ b/src/ol_infrastructure/applications/edxapp/files/edxapp/mitxonline/50-general-config.yaml @@ -169,6 +169,7 @@ FEATURES: ENABLE_ENROLLMENT_RESET: false ENABLE_EXAM_SETTINGS_HTML_VIEW: true # ADDED KEY ENABLE_EXPORT_GIT: true # MODIFIED + ENABLE_AUTO_GITHUB_REPO_CREATION: true ENABLE_FORUM_DAILY_DIGEST: true ENABLE_GIT_AUTO_EXPORT: true # ADDED KEY ENABLE_GRADE_DOWNLOADS: true diff --git a/src/ol_infrastructure/applications/edxapp/k8s_configmaps.py b/src/ol_infrastructure/applications/edxapp/k8s_configmaps.py index 7f0a894394..dd517ae739 100644 --- a/src/ol_infrastructure/applications/edxapp/k8s_configmaps.py +++ b/src/ol_infrastructure/applications/edxapp/k8s_configmaps.py @@ -272,6 +272,7 @@ def create_k8s_configmaps( SOCIAL_AUTH_EDX_OAUTH2_URL_ROOT: https://{edxapp_config.require_object("domains")["lms"]} SOCIAL_AUTH_EDX_OAUTH2_PUBLIC_URL_ROOT: https://{edxapp_config.require_object("domains")["lms"]} SESSION_COOKIE_NAME: {env_name}-edx-studio-sessionid + GITHUB_ORG_API_URL: {edxapp_config.require("github_org_api_url")} """) }, opts=ResourceOptions(delete_before_replace=True), diff --git a/src/ol_infrastructure/applications/edxapp/k8s_secrets.py b/src/ol_infrastructure/applications/edxapp/k8s_secrets.py index 4e77880a78..5029338c1b 100644 --- a/src/ol_infrastructure/applications/edxapp/k8s_secrets.py +++ b/src/ol_infrastructure/applications/edxapp/k8s_secrets.py @@ -63,6 +63,12 @@ def _build_general_secrets_template( SYSADMIN_GITHUB_WEBHOOK_KEY: {{{{ get .Secrets "sysadmin_git_webhook_secret" }}}}""" ] + if stack_info.env_prefix == "mitxonline": + template_parts.append( + """ + GITHUB_ACCESS_TOKEN: {{{{ get .Secrets "github_access_token" }}}}""" + ) + # Conditional: xpro-specific email configuration if stack_info.env_prefix == "xpro": template_parts.append(