Create a new issue on GitHub with this checklist after the finals every semester.
- Rotate
GITHUB_API_TOKEN, which expires after 366 days, and update it in both deployment platforms:- In the Cloudflare workers, update the token on the Cloudflare dashboard and grant write permissions under Issues for the
nusmodsrepository so venue issues can be created. - In Vercel, update the token for both the
nusmods-websiteandnusmods-exportprojects so fork PR builds can be identified byvercel_ignore_build.sh. The token is used by the projects' ignored build step, not by either service at runtime.
- In the Cloudflare workers, update the token on the Cloudflare dashboard and grant write permissions under Issues for the
-
Prepare "PR1"
- Update
packages/nusmods-academic-calendar/academic-calendar.jsonwith data for the new academic year so scraper and website Special Term overlap routing remains correct - Update with next year's holiday data from academic calendar to
website/src/data/holidays.json- Singapore & NUS Holidays (e.g. Well-Being day): https://www.nus.edu.sg/registrar/calendar - Update academic year in
scrapers/nus-v2/src/config.ts
- Update
-
Prepare "PR2"
- In
app-config.json, updateacademicYearandexamAvailabilityto include only the semesters where exam information is available - Update
packages/nusmods-academic-calendar/academic-calendar.jsonwith data for the new academic year - Add announcement to website by updating
website/src/views/components/notfications/Announcements.tsx - Leave
specialTermAcademicYearasnull— overlap with previous AY Special Term I and II is handled automatically until new AY Semester 1 starts (see PR3). Set manually (e.g."2024/2025") only if auto-detection from the academic calendar is insufficient - Update
semesterinapp-config.jsonand the ModReg schedule (see Every Semester)
- In
- Merge "PR1"
- Push PR1 to production
- Ensure that scraper is scraping next AY's data. You can do so by checking the locally published JSON files, or visiting
https://api.nusmods.com/v2/20XX-20XX/(e.g. https://api.nusmods.com/v2/2022-2023/) - On Vercel or
.env: Update academic year in export service's environment variables - Merge "PR2" to Master > Production
- Deploy! 🎉 🎉
- Monitor Sentry and Telegram for issues
PR2 is usually merged around July, while previous AY Special Term I and II run until new AY Semester 1 starts. During this window, sem 1–2 use the new AY and sem 3–4 continue to use the previous AY automatically — no action needed unless specialTermAcademicYear was set manually in PR2.
- Prepare "PR3"
- Ensure
specialTermAcademicYearisnull(overlap ends when Semester 1 starts perpackages/nusmods-academic-calendar/academic-calendar.json) - Add the previous academic year to
archiveYearsinwebsite/src/config/app-config.jsonso course historical-data links include it
- Ensure
- Merge "PR3" to Master > Production
- Deploy and monitor Sentry and Telegram for issues
Reference PRs: PR #3286 and PR #3287
- Update semester in
website/src/config/app-config.json - Update the ModReg schedule in
website/src/data/modreg-schedule.json, and make sure the correct version is pointed to inwebsite/src/config/index.ts- Reference PR: PR #2764
- Update
ACADEMIC_YEARinscrapers/cpex-scraper/src/index.ts. It should be for the next semester - Create PR and merge to production
- Run scraper
For cpex-staging deployment
- Update
MPE_SEMESTERinwebsite/src/views/mpe/constants.tsto be the semester you're configuring CPEx for (usually the next semester) - Update dates in the ModReg schedule in
website/src/data/modreg-schedule.json - Enable the
enableCPExforProdandshowCPExTabflags inwebsite/src/featureFlags.ts - Push onto
cpex-stagingbranch (Ensure synced withmasterbranch first), then visit https://cpex-staging.nusmods.com/cpex and verify that NUS authentication is working
git checkout master
git pull
git switch cpex-staging
git reset --hard master
git push- Merge
cpex-stagingintomastervia PR - Deploy latest
mastertoproduction
- Disable the
enableCPExforProdandshowCPExTabflags inwebsite/src/featureFlags.ts - Merge into
master - Deploy latest
mastertoproduction