From 9d7d9c85cabca599560023bcf978d88eb8951167 Mon Sep 17 00:00:00 2001 From: Carlos Castillo Date: Tue, 3 Feb 2026 15:50:14 +0100 Subject: [PATCH] Moodle workplace release page --- data/wp_versions.json | 1289 +++++++++++++++++ .../1680px-workplace_releases_timeline.png | Bin 0 -> 122857 bytes general/wp_releases.md | 151 ++ scripts/wp_version.mjs | 542 +++++++ sidebars/general.js | 5 + src/components/ReleaseTableWP/index.tsx | 108 ++ src/components/SupportedReleasesWP/index.tsx | 78 + .../SupportedReleasesWP/styles.module.css | 3 + src/utils/SupportedReleasesWP.ts | 188 +++ static/schema/wp_versions.json | 122 ++ 10 files changed, 2486 insertions(+) create mode 100644 data/wp_versions.json create mode 100644 general/_wp_releases/1680px-workplace_releases_timeline.png create mode 100644 general/wp_releases.md create mode 100644 scripts/wp_version.mjs create mode 100755 src/components/ReleaseTableWP/index.tsx create mode 100644 src/components/SupportedReleasesWP/index.tsx create mode 100644 src/components/SupportedReleasesWP/styles.module.css create mode 100644 src/utils/SupportedReleasesWP.ts create mode 100644 static/schema/wp_versions.json diff --git a/data/wp_versions.json b/data/wp_versions.json new file mode 100644 index 0000000000..ffc6b32ade --- /dev/null +++ b/data/wp_versions.json @@ -0,0 +1,1289 @@ +{ + "$schema": "../static/schema/wp_versions.json", + "versions": [ + { + "name": "5.1", + "releaseDate": "4 November 2025", + "generalEndDate": "20 August 2026", + "securityEndDate": "20 August 2026", + "improvementsandnewfeaturesEndDate": "21 April 2026", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "5.1.0", + "releaseDate": "4 November 2025", + "version": 2025110400, + "upgradePath": "https://docs.moodle.org/501/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/501/en/Moodle_Workplace_rolling_release_notes" + }, + { + "name": "5.1.1", + "releaseDate": "9 December 2025", + "version": 2025110410, + "releaseNoteUrl": "https://docs.moodle.org/501/en/Moodle_Workplace_rolling_release_notes#5.1.1_rolling" + }, + { + "name": "5.1.3", + "releaseDate": "13 February 2026", + "version": 2026021300, + "releaseNoteUrl": false + } + ] + }, + { + "name": "5.1", + "releaseDate": "4 November 2025", + "generalEndDate": "6 October 2026", + "securityEndDate": "6 April 2027", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "5.1.0", + "releaseDate": "4 November 2025", + "version": 2025110400, + "upgradePath": "https://docs.moodle.org/501/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/501/en/Moodle_Workplace_release_notes" + }, + { + "name": "5.1.1", + "releaseDate": "9 December 2025", + "version": 2025110410, + "releaseNoteUrl": "https://docs.moodle.org/501/en/Moodle_Workplace_release_notes#5.1.1" + }, + { + "name": "5.1.3", + "releaseDate": "13 February 2026", + "version": 2026021300, + "releaseNoteUrl": false + } + ] + }, + { + "name": "5.0", + "releaseDate": "13 May 2025", + "generalEndDate": "10 February 2026", + "securityEndDate": "10 February 2026", + "improvementsandnewfeaturesEndDate": "7 October 2025", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "5.0.0", + "releaseDate": "13 May 2025", + "version": 2025051300, + "upgradePath": "https://docs.moodle.org/500/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_rolling_release_notes" + }, + { + "name": "5.0.1", + "releaseDate": "10 June 2025", + "version": 2025061000, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_rolling_release_notes#5.0.1_rolling" + }, + { + "name": "5.0.2", + "releaseDate": "12 August 2025", + "version": 2025081200, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_rolling_release_notes#5.0.2_rolling" + }, + { + "name": "5.0.3", + "releaseDate": "7 October 2025", + "version": 2025092210, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_rolling_release_notes#5.0.3_rolling" + }, + { + "name": "5.0.4", + "releaseDate": "9 December 2025", + "version": 2025092220, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_rolling_release_notes#5.0.4_rolling" + }, + { + "name": "5.0.6", + "releaseDate": "13 February 2026", + "version": 2025092236, + "releaseNoteUrl": false + } + ] + }, + { + "name": "5.0", + "releaseDate": "13 May 2025", + "generalEndDate": "21 April 2026", + "securityEndDate": "6 October 2026", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "5.0.0", + "releaseDate": "13 May 2025", + "version": 2025051300, + "upgradePath": "https://docs.moodle.org/500/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_release_notes" + }, + { + "name": "5.0.1", + "releaseDate": "10 June 2025", + "version": 2025051310, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_release_notes#5.0.1" + }, + { + "name": "5.0.2", + "releaseDate": "12 August 2025", + "version": 2025051320, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_release_notes#5.0.2" + }, + { + "name": "5.0.3", + "releaseDate": "7 October 2025", + "version": 2025051330, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_release_notes#5.0.3" + }, + { + "name": "5.0.4", + "releaseDate": "9 December 2025", + "version": 2025051340, + "releaseNoteUrl": "https://docs.moodle.org/500/en/Moodle_Workplace_release_notes#5.0.4" + }, + { + "name": "5.0.6", + "releaseDate": "13 February 2026", + "version": 2025051356, + "releaseNoteUrl": false + } + ] + }, + { + "name": "4.5", + "releaseDate": "5 November 2024", + "generalEndDate": "4 November 2025", + "securityEndDate": "4 November 2025", + "improvementsandnewfeaturesEndDate": "4 March 2025", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "4.5.0", + "releaseDate": "5 November 2024", + "version": 2024110500, + "upgradePath": "https://docs.moodle.org/405/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes" + }, + { + "name": "4.5.1", + "releaseDate": "10 December 2024", + "version": 2024121000, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes#4.5.1_rolling" + }, + { + "name": "4.5.2", + "releaseDate": "11 February 2025", + "version": 2025021100, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes#4.5.2_rolling" + }, + { + "name": "4.5.3", + "releaseDate": "18 March 2025", + "version": 2025031800, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes#4.5.3_rolling" + }, + { + "name": "4.5.4", + "releaseDate": "15 April 2025", + "version": 2025033110, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes#4.5.4_rolling" + }, + { + "name": "4.5.5", + "releaseDate": "10 June 2025", + "version": 2025033120, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes#4.5.5_rolling" + }, + { + "name": "4.5.6", + "releaseDate": "12 August 2025", + "version": 2025033130, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_rolling_release_notes#4.5.6_rolling" + } + ] + }, + { + "name": "4.5", + "releaseDate": "5 November 2024", + "generalEndDate": "7 October 2025", + "securityEndDate": "5 October 2027", + "improvementsandnewfeaturesEndDate": "", + "isLTS": true, + "isRolling": false, + "releases": [ + { + "name": "4.5.0", + "releaseDate": "5 November 2024", + "version": 2024110500, + "upgradePath": "https://docs.moodle.org/405/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes" + }, + { + "name": "4.5.1", + "releaseDate": "10 December 2024", + "version": 2024110510, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.1" + }, + { + "name": "4.5.2", + "releaseDate": "11 February 2025", + "version": 2024110520, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.2" + }, + { + "name": "4.5.3", + "releaseDate": "18 March 2025", + "version": 2024110530, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.3" + }, + { + "name": "4.5.4", + "releaseDate": "14 April 2025", + "version": 2024110540, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.4" + }, + { + "name": "4.5.5", + "releaseDate": "10 June 2025", + "version": 2024110550, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.5" + }, + { + "name": "4.5.6", + "releaseDate": "12 August 2025", + "version": 2024110560, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.6" + }, + { + "name": "4.5.7", + "releaseDate": "7 October 2025", + "version": 2024110570, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.7" + }, + { + "name": "4.5.8", + "releaseDate": "9 December 2025", + "version": 2024110580, + "releaseNoteUrl": "https://docs.moodle.org/405/en/Moodle_Workplace_release_notes#4.5.8" + } + ] + }, + { + "name": "4.4", + "releaseDate": "21 May 2024", + "generalEndDate": "20 May 2025", + "securityEndDate": "20 November 2025", + "improvementsandnewfeaturesEndDate": "20 September 2024", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "4.4.0", + "releaseDate": "21 May 2024", + "version": 2024052100, + "upgradePath": "https://docs.moodle.org/404/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes" + }, + { + "name": "4.4.1", + "releaseDate": "11 June 2024", + "version": 2024061100, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes#4.4.1_rolling" + }, + { + "name": "4.4.2", + "releaseDate": "13 August 2024", + "version": 2024081300, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes#4.4.2_rolling" + }, + { + "name": "4.4.3", + "releaseDate": "3 September 2024", + "version": 2024090300, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes#4.4.3_rolling" + }, + { + "name": "4.4.4", + "releaseDate": "8 October 2024", + "version": 2024093010, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes#4.4.4_rolling" + }, + { + "name": "4.4.5", + "releaseDate": "10 December 2024", + "version": 2024093020, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes#4.4.5_rolling" + }, + { + "name": "4.4.6", + "releaseDate": "11 February 2025", + "version": 2024093030, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_rolling_release_notes#4.4.6_rolling" + } + ] + }, + { + "name": "4.4", + "releaseDate": "21 May 2024", + "generalEndDate": "20 May 2025", + "securityEndDate": "20 November 2025", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "4.4.0", + "releaseDate": "21 May 2024", + "version": 2024052100, + "upgradePath": "https://docs.moodle.org/404/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes" + }, + { + "name": "4.4.1", + "releaseDate": "11 June 2024", + "version": 2024052110, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.1" + }, + { + "name": "4.4.2", + "releaseDate": "13 August 2024", + "version": 2024052120, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.2" + }, + { + "name": "4.4.3", + "releaseDate": "3 September 2024", + "version": 2024052130, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.3" + }, + { + "name": "4.4.4", + "releaseDate": "8 October 2024", + "version": 2024052140, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.4" + }, + { + "name": "4.4.5", + "releaseDate": "10 December 2024", + "version": 2024052150, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.5" + }, + { + "name": "4.4.6", + "releaseDate": "11 February 2025", + "version": 2024052160, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.6" + }, + { + "name": "4.4.7", + "releaseDate": "18 March 2025", + "version": 2024052170, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.7" + }, + { + "name": "4.4.8", + "releaseDate": "15 April 2025", + "version": 2024052180, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.8" + }, + { + "name": "4.4.9", + "releaseDate": "10 June 2025", + "version": 2024052190, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.9" + }, + { + "name": "4.4.10", + "releaseDate": "12 August 2025", + "version": 2024052200, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.10" + }, + { + "name": "4.4.11", + "releaseDate": "7 October 2025", + "version": 2024052210, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.11" + }, + { + "name": "4.4.12", + "releaseDate": "9 December 2025", + "version": 2024052220, + "releaseNoteUrl": "https://docs.moodle.org/404/en/Moodle_Workplace_release_notes#4.4.12" + } + ] + }, + { + "name": "4.3", + "releaseDate": "9 November 2023", + "generalEndDate": "8 November 2024", + "securityEndDate": "8 May 2025", + "improvementsandnewfeaturesEndDate": "8 March 2024", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "4.3.0", + "releaseDate": "9 November 2023", + "version": 2023110900, + "upgradePath": "https://docs.moodle.org/403/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes" + }, + { + "name": "4.3.1", + "releaseDate": "12 December 2023", + "version": 2023121200, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes#4.3.1_rolling" + }, + { + "name": "4.3.2", + "releaseDate": "28 December 2023", + "version": 2023122800, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes#4.3.2_rolling" + }, + { + "name": "4.3.3", + "releaseDate": "13 February 2024", + "version": 2024021300, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes#4.3.3_rolling" + }, + { + "name": "4.3.4", + "releaseDate": "23 April 2024", + "version": 2024041510, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes#4.3.4_rolling" + }, + { + "name": "4.3.5", + "releaseDate": "11 June 2024", + "version": 2024041520, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes#4.3.5_rolling" + }, + { + "name": "4.3.6", + "releaseDate": "13 August 2024", + "version": 2024041530, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_rolling_release_notes#4.3.6_rolling" + } + ] + }, + { + "name": "4.3", + "releaseDate": "9 November 2023", + "generalEndDate": "8 November 2024", + "securityEndDate": "8 May 2025", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "4.3.0", + "releaseDate": "9 November 2023", + "version": 2023110900, + "upgradePath": "https://docs.moodle.org/403/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes" + }, + { + "name": "4.3.1", + "releaseDate": "12 December 2023", + "version": 2023110910, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.1" + }, + { + "name": "4.3.2", + "releaseDate": "28 December 2023", + "version": 2023110920, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.2" + }, + { + "name": "4.3.3", + "releaseDate": "13 February 2024", + "version": 2023110930, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.3" + }, + { + "name": "4.3.4", + "releaseDate": "23 April 2024", + "version": 2023110940, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.4" + }, + { + "name": "4.3.5", + "releaseDate": "11 June 2024", + "version": 2023110950, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.5" + }, + { + "name": "4.3.6", + "releaseDate": "13 August 2024", + "version": 2023110960, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.6" + }, + { + "name": "4.3.7", + "releaseDate": "3 September 2024", + "version": 2023110970, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.7" + }, + { + "name": "4.3.8", + "releaseDate": "8 October 2024", + "version": 2023110980, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.8" + }, + { + "name": "4.3.9", + "releaseDate": "10 December 2024", + "version": 2023110990, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.9" + }, + { + "name": "4.3.10", + "releaseDate": "11 February 2025", + "version": 2023111000, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.10" + }, + { + "name": "4.3.11", + "releaseDate": "18 March 2025", + "version": 2023111010, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.11" + }, + { + "name": "4.3.12", + "releaseDate": "15 April 2025", + "version": 2023111020, + "releaseNoteUrl": "https://docs.moodle.org/403/en/Moodle_Workplace_release_notes#4.3.12" + } + ] + }, + { + "name": "4.2", + "releaseDate": "30 May 2023", + "generalEndDate": "29 May 2024", + "securityEndDate": "29 November 2024", + "improvementsandnewfeaturesEndDate": "29 September 2023", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "4.2.0", + "releaseDate": "30 May 2023", + "version": 2023053000, + "upgradePath": "https://docs.moodle.org/402/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes" + }, + { + "name": "4.2.1", + "releaseDate": "13 June 2023", + "version": 2023061300, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes#4.2.1" + }, + { + "name": "4.2.2", + "releaseDate": "22 August 2023", + "version": 2023082200, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes#4.2.2_rolling" + }, + { + "name": "4.2.3", + "releaseDate": "10 October 2023", + "version": 2023101000, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes#4.2.3_rolling" + }, + { + "name": "4.2.4", + "releaseDate": "12 December 2023", + "version": 2023101010, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes#4.2.4_rolling" + }, + { + "name": "4.2.5", + "releaseDate": "28 December 2023", + "version": 2023101020, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes#4.2.5_rolling" + }, + { + "name": "4.2.6", + "releaseDate": "14 February 2024", + "version": 2023101030, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_rolling_release_notes#4.2.6_rolling" + } + ] + }, + { + "name": "4.2", + "releaseDate": "30 May 2023", + "generalEndDate": "29 May 2024", + "securityEndDate": "29 November 2024", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "4.2.0", + "releaseDate": "30 May 2023", + "version": 2023053000, + "upgradePath": "https://docs.moodle.org/402/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes" + }, + { + "name": "4.2.1", + "releaseDate": "13 June 2023", + "version": 2023053010, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.1" + }, + { + "name": "4.2.2", + "releaseDate": "22 August 2023", + "version": 2023053020, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.2" + }, + { + "name": "4.2.3", + "releaseDate": "10 October 2023", + "version": 2023053030, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.3" + }, + { + "name": "4.2.4", + "releaseDate": "12 December 2023", + "version": 2023053040, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.4" + }, + { + "name": "4.2.5", + "releaseDate": "28 December 2023", + "version": 2023053050, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.5" + }, + { + "name": "4.2.6", + "releaseDate": "13 February 2024", + "version": 2023053060, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.6" + }, + { + "name": "4.2.7", + "releaseDate": "23 April 2024", + "version": 2023053070, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.7" + }, + { + "name": "4.2.8", + "releaseDate": "11 June 2024", + "version": 2023053080, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.8" + }, + { + "name": "4.2.9", + "releaseDate": "13 August 2024", + "version": 2023053090, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.9" + }, + { + "name": "4.2.10", + "releaseDate": "3 September 2024", + "version": 2023053100, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.10" + }, + { + "name": "4.2.11", + "releaseDate": "8 October 2024", + "version": 2023053110, + "releaseNoteUrl": "https://docs.moodle.org/402/en/Moodle_Workplace_release_notes#4.2.11" + } + ] + }, + { + "name": "4.1", + "releaseDate": "11 January 2023", + "generalEndDate": "10 January 2024", + "securityEndDate": "10 July 2024", + "improvementsandnewfeaturesEndDate": "10 May 2023", + "isLTS": false, + "isRolling": true, + "releases": [ + { + "name": "4.1.0", + "releaseDate": "11 January 2023", + "version": 2023011100, + "upgradePath": "https://docs.moodle.org/401/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes" + }, + { + "name": "4.1.1", + "releaseDate": "17 January 2023", + "version": 2023011700, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.1" + }, + { + "name": "4.1.2", + "releaseDate": "14 March 2023", + "version": 2023031400, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.2" + }, + { + "name": "4.1.3", + "releaseDate": "25 April 2023", + "version": 2023042500, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.3" + }, + { + "name": "4.1.4", + "releaseDate": "13 June 2023", + "version": 2023042510, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.4" + }, + { + "name": "4.1.5", + "releaseDate": "22 August 2023", + "version": 2023042520, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.5" + } + ] + }, + { + "name": "4.1", + "releaseDate": "11 January 2023", + "generalEndDate": "10 January 2024", + "securityEndDate": "10 January 2026", + "improvementsandnewfeaturesEndDate": "", + "isLTS": true, + "isRolling": false, + "releases": [ + { + "name": "4.1.0", + "releaseDate": "11 January 2023", + "version": 2023011100, + "upgradePath": "https://docs.moodle.org/401/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes" + }, + { + "name": "4.1.1", + "releaseDate": "17 January 2023", + "version": 2023011110, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.1" + }, + { + "name": "4.1.2", + "releaseDate": "14 March 2001", + "version": 2023011120, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.2" + }, + { + "name": "4.1.3", + "releaseDate": "25 April 2023", + "version": 2023011130, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.3" + }, + { + "name": "4.1.4", + "releaseDate": "13 June 2023", + "version": 2023011140, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.4" + }, + { + "name": "4.1.5", + "releaseDate": "22 August 2023", + "version": 2023011150, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.5" + }, + { + "name": "4.1.6", + "releaseDate": "10 October 2023", + "version": 2023011160, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.6" + }, + { + "name": "4.1.7", + "releaseDate": "12 December 2023", + "version": 2023011170, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.7" + }, + { + "name": "4.1.8", + "releaseDate": "23 December 2023", + "version": 2023011180, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.8" + }, + { + "name": "4.1.9", + "releaseDate": "13 February 2023", + "version": 2023011190, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.9" + }, + { + "name": "4.1.10", + "releaseDate": "23 April 2024", + "version": 2023011200, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.10" + }, + { + "name": "4.1.11", + "releaseDate": "11 June 2024", + "version": 2023011210, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.11" + }, + { + "name": "4.1.12", + "releaseDate": "13 August 2024", + "version": 2023011220, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.12" + }, + { + "name": "4.1.13", + "releaseDate": "3 September 2024", + "version": 2023011230, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.13" + }, + { + "name": "4.1.14", + "releaseDate": "8 October 2024", + "version": 2023011240, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.14" + }, + { + "name": "4.1.15", + "releaseDate": "13 December 2024", + "version": 2023011250, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.15" + }, + { + "name": "4.1.16", + "releaseDate": "11 February 2025", + "version": 2023011260, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.16" + }, + { + "name": "4.1.17", + "releaseDate": "18 March 2025", + "version": 2023011270, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.17" + }, + { + "name": "4.1.18", + "releaseDate": "15 April 2025", + "version": 2023011280, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.18" + }, + { + "name": "4.1.19", + "releaseDate": "10 June 2025", + "version": 2023011290, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.19" + }, + { + "name": "4.1.20", + "releaseDate": "12 August 2025", + "version": 2023011300, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.20" + }, + { + "name": "4.1.21", + "releaseDate": "7 October 2025", + "version": 2023011310, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.21" + }, + { + "name": "4.1.22", + "releaseDate": "9 December 2025", + "version": 2023011320, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.1_release_notes#4.1.22" + } + ] + }, + { + "name": "4.0", + "releaseDate": "14 October 2022", + "generalEndDate": "13 October 2023", + "securityEndDate": "13 April 2024", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "4.0.0", + "releaseDate": "14 October 2022", + "version": 2022101400, + "upgradePath": "https://docs.moodle.org/400/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes" + }, + { + "name": "4.0.5", + "releaseDate": "15 November 2022", + "version": 2022111500, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.5" + }, + { + "name": "4.0.6", + "releaseDate": "17 January 2023", + "version": 2022112810, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.6" + }, + { + "name": "4.0.7", + "releaseDate": "14 March 2023", + "version": 2022112811, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.7" + }, + { + "name": "4.0.8", + "releaseDate": "25 April 2023", + "version": 2022112812, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.8" + }, + { + "name": "4.0.9", + "releaseDate": "13 June 2023", + "version": 2022112840, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.9" + }, + { + "name": "4.0.10", + "releaseDate": "22 August 2023", + "version": 2022112850, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.10" + }, + { + "name": "4.0.11", + "releaseDate": "10 October 2023", + "version": 2022112860, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_4.0_release_notes#4.0.11" + }, + { + "name": "4.0.12", + "releaseDate": "12 December 2023", + "version": 2022112870, + "releaseNoteUrl": false + } + ] + }, + { + "name": "3.11", + "releaseDate": "8 June 2021", + "generalEndDate": "7 June 2022", + "securityEndDate": "7 December 2022", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "3.11.0", + "releaseDate": "8 June 2021", + "version": 2021060800, + "upgradePath": "https://docs.moodle.org/311/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes" + }, + { + "name": "3.11.1", + "releaseDate": "20 July 2021", + "version": 2021072000, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.1" + }, + { + "name": "3.11.2", + "releaseDate": "30 July 2021", + "version": 2021073000, + "releaseNoteUrl": false + }, + { + "name": "3.11.3", + "releaseDate": "20 September 2021", + "version": 2021092000, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.3" + }, + { + "name": "3.11.4", + "releaseDate": "25 November 2021", + "version": 2021112500, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.4" + }, + { + "name": "3.11.5", + "releaseDate": "18 January 2022", + "version": 2022011800, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.5" + }, + { + "name": "3.11.6", + "releaseDate": "15 March 2022", + "version": 2022031500, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.6" + }, + { + "name": "3.11.7", + "releaseDate": "10 May 2022", + "version": 2022031610, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.7" + }, + { + "name": "3.11.8", + "releaseDate": "12 July 2022", + "version": 2022031620, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.8" + }, + { + "name": "3.11.9", + "releaseDate": "23 August 2022", + "version": 2022031630, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.9" + }, + { + "name": "3.11.10", + "releaseDate": "13 September 2022", + "version": 2022031640, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.10" + }, + { + "name": "3.11.11", + "releaseDate": "15 November 2022", + "version": 2022031650, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.11" + }, + { + "name": "3.11.12", + "releaseDate": "17 January 2023", + "version": 2022031660, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.12" + }, + { + "name": "3.11.13", + "releaseDate": "14 March 2023", + "version": 2022031670, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.13" + }, + { + "name": "3.11.14", + "releaseDate": "25 April 2023", + "version": 2022031680, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.11_release_notes#3.11.14" + }, + { + "name": "3.11.15", + "releaseDate": "13 June 2023", + "version": 2022031690, + "releaseNoteUrl": false + }, + { + "name": "3.11.16", + "releaseDate": "22 August 2023", + "version": 2022031700, + "releaseNoteUrl": false + }, + { + "name": "3.11.17", + "releaseDate": "10 October 2023", + "version": 2022031710, + "releaseNoteUrl": false + }, + { + "name": "3.11.18", + "releaseDate": "12 December 2023", + "version": 2022031720, + "releaseNoteUrl": false + } + ] + }, + { + "name": "3.10", + "releaseDate": "1 December 2020", + "generalEndDate": "30 November 2021", + "securityEndDate": "31 May 2022", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "3.10.0", + "releaseDate": "1 December 2020", + "version": 2020120100, + "upgradePath": "https://docs.moodle.org/310/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.10_release_notes#3.10" + }, + { + "name": "3.10.1", + "releaseDate": "19 January 2021", + "version": 2021011900, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.10_release_notes#3.10.1" + }, + { + "name": "3.10.2", + "releaseDate": "9 March 2021", + "version": 2021030800, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.10_release_notes#3.10.2" + }, + { + "name": "3.10.3", + "releaseDate": "25 March 2021", + "version": 2021032500, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.10_release_notes#3.10.3" + }, + { + "name": "3.10.4", + "releaseDate": "10 May 2021", + "version": 2021051000, + "releaseNoteUrl": false + }, + { + "name": "3.10.5", + "releaseDate": "13 July 2021", + "version": 2021051200, + "releaseNoteUrl": false + }, + { + "name": "3.10.6", + "releaseDate": "30 July 2021", + "version": 2021051210, + "releaseNoteUrl": false + }, + { + "name": "3.10.7", + "releaseDate": "16 September 2021", + "version": 2021051220, + "releaseNoteUrl": false + }, + { + "name": "3.10.8", + "releaseDate": "17 November 2021", + "version": 2021051230, + "releaseNoteUrl": false + }, + { + "name": "3.10.9", + "releaseDate": "18 January 2022", + "version": 2021051240, + "releaseNoteUrl": false + }, + { + "name": "3.10.10", + "releaseDate": "15 March 2022", + "version": 2021051250, + "releaseNoteUrl": false + }, + { + "name": "3.10.11", + "releaseDate": "10 May 2022", + "version": 2021051260, + "releaseNoteUrl": false + } + ] + }, + { + "name": "3.9", + "releaseDate": "30 June 2020", + "generalEndDate": "29 June 2021", + "securityEndDate": "29 December 2021", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "3.9.0", + "releaseDate": "30 June 2020", + "version": 2020063000, + "upgradePath": "https://docs.moodle.org/309/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.9_release_notes#3.9" + }, + { + "name": "3.9.1", + "releaseDate": "15 July 2020", + "version": 2020071500, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.9_release_notes#3.9.1" + }, + { + "name": "3.9.2", + "releaseDate": "24 September 2020", + "version": 2020092400, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.9_release_notes#3.9.2" + }, + { + "name": "3.9.3", + "releaseDate": "10 November 2020", + "version": 2020111000, + "releaseNoteUrl": false + } + ] + }, + { + "name": "3.8", + "releaseDate": "26 November 2019", + "generalEndDate": "25 November 2020", + "securityEndDate": "25 May 2021", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "3.8.0", + "releaseDate": "26 November 2019", + "version": 2019112600, + "upgradePath": "https://docs.moodle.org/308/en/Upgrading", + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.8_release_notes#3.8" + }, + { + "name": "3.8.1", + "releaseDate": "20 January 2020", + "version": 2020012000, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.8_release_notes#3.8.1" + }, + { + "name": "3.8.2", + "releaseDate": "10 March 2020", + "version": 2020031000, + "releaseNoteUrl": "https://docs.moodle.org/dev/Moodle_Workplace_3.8_release_notes#3.8.2" + }, + { + "name": "3.8.3", + "releaseDate": "12 May 2020", + "version": 2020051200, + "releaseNoteUrl": false + }, + { + "name": "3.8.4", + "releaseDate": "9 June 2020", + "version": 2020060900, + "releaseNoteUrl": false + } + ] + }, + { + "name": "3.7", + "releaseDate": "25 June 2019", + "generalEndDate": "24 June 2020", + "securityEndDate": "24 December 2020", + "improvementsandnewfeaturesEndDate": "", + "isLTS": false, + "isRolling": false, + "releases": [ + { + "name": "3.7.0", + "releaseDate": "25 June 2019", + "version": 2019062500, + "upgradePath": "https://docs.moodle.org/307/en/Upgrading", + "releaseNoteUrl": false + }, + { + "name": "3.7.2", + "releaseDate": "10 September 2019", + "version": 2019091000, + "releaseNoteUrl": false + }, + { + "name": "3.7.3", + "releaseDate": "12 November 2019", + "version": 2019111200, + "releaseNoteUrl": false + } + ] + } + ] +} \ No newline at end of file diff --git a/general/_wp_releases/1680px-workplace_releases_timeline.png b/general/_wp_releases/1680px-workplace_releases_timeline.png new file mode 100644 index 0000000000000000000000000000000000000000..a1146486532a8e54b45d75599036854b2570369f GIT binary patch literal 122857 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
  • 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 literal 0 HcmV?d00001 diff --git a/general/wp_releases.md b/general/wp_releases.md new file mode 100644 index 0000000000..864f88cc1d --- /dev/null +++ b/general/wp_releases.md @@ -0,0 +1,151 @@ +--- +title: Moodle Workplace releases +tags: + - 'Workplace' + - Release notes +--- + + + +import SupportedReleasesWP, { styles as ReleaseStylesWP } from '@site/src/components/SupportedReleasesWP'; +import ReleaseTableWP from '@site/src/components/ReleaseTableWP'; + +This page lists all official releases of Moodle Workplace, grouped by branch in reverse chronological order. + +## Release cycle + +Moodle Workplace is based on top of Moodle LMS. Moodle Workplace releases always follow the Moodle LMS releases. The minors are normally released the next day and the majors are normally released after three-four weeks. + +These are the target dates for releases. These dates may vary slightly due to unforeseen circumstances. When the Moodle LMS release is delayed, the Moodle Workplace release is delayed respectively. See also [Moodle LMS Releases](https://moodledev.io/general/releases). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Release + + Moodle Workplace + + Moodle LMS +
    Release type Frequency Release Includes Release Includes
    [Major](./development/process#major-release-cycles) (eg. 3.x)6 monthly3-4 weeks after Moodle LMS majorNew features, improvements and bug fixes (Moodle LMS and Workplace)April and OctoberNew features, Improvements and fixes
    [Minor](./development/process#stable-maintenance-cycles) (Point) (eg. 3.x.y)2 monthly1 day after Moodle LMS minorWorkplace new features, improvements and bug fixes and Moodle LMS fixesFebruary, April, June, August, October and DecemberFixes based on the latest major release and never any significant new features or database changes
    + +Starting from 4.1 release, we package two Workplace versions in every release: + +- **Standard version**: no new features in minor releases, this version is supported for bug fixes and security fixes while the corresponding version of LMS is supported +- **Rolling version**: features are added continuously up until the new major release of LMS, after that it has bug fixes for four more months and then support stops completely (which is approximately 3 months after the next Workplace major release). + +![Release graph summarising the currently supported Workplace releases in a visual form](_wp_releases/1680px-workplace_releases_timeline.png) + +### End-of-life dates for currently supported releases + + + + +
    +## Moodle Workplace 5.1 Rolling + + +
    +## Moodle Workplace 5.1 + + +
    +## Moodle Workplace 5.0 Rolling + + +
    +## Moodle Workplace 5.0 + + +
    +## Moodle Workplace 4.5 Rolling + + +
    +## Moodle Workplace 4.5 (LTS) + + +
    +## Moodle Workplace 4.4 Rolling + + +
    +## Moodle Workplace 4.4 + + +
    +## Moodle Workplace 4.3 Rolling + + +
    +## Moodle Workplace 4.3 + + +
    +## Moodle Workplace 4.2 Rolling + + +
    +## Moodle Workplace 4.2 + + +
    +## Moodle Workplace 4.1 Rolling + + +
    +## Moodle Workplace 4.1 (LTS) + + +
    +## Moodle Workplace 4.0 + + +
    +## Moodle Workplace 3.11 + + +
    +## Moodle Workplace 3.10 + + +
    +## Moodle Workplace 3.9 + + +
    +## Moodle workplace 3.8 + + +
    +## Moodle workplace 3.7 + diff --git a/scripts/wp_version.mjs b/scripts/wp_version.mjs new file mode 100644 index 0000000000..b72e136395 --- /dev/null +++ b/scripts/wp_version.mjs @@ -0,0 +1,542 @@ +#!/usr/bin/env node +/** + * Copyright (c) Moodle Pty Ltd. + * + * Moodle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Moodle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Moodle. If not, see . + */ + +/* eslint-disable import/no-extraneous-dependencies */ + +import { program } from 'commander'; +import { readFile, writeFile } from 'fs/promises'; +import inquirer from 'inquirer'; + +const versionData = JSON.parse(await readFile('./data/wp_versions.json')); + +const getMajorVersionFromData = (majorVersion, isRollingVersion) => versionData.versions.find( + (version) => version.name === majorVersion && version.isRolling === isRollingVersion, +); +const getMajorVersionIndexFromData = (majorVersion, isRollingVersion) => versionData.versions.findIndex( + (version) => version.name === majorVersion && version.isRolling === isRollingVersion, +); +const getMajorVersionNameFromMinor = (minorVersion) => minorVersion.split('.').slice(0, 2).join('.'); +const updateMajorVersionWithData = (majorVersion, data, isRollingVersion = false) => { + const index = getMajorVersionIndexFromData(majorVersion, isRollingVersion); + versionData.versions[index] = data; +}; +const updateMinorVersionWithData = (majorVersion, minorVersion, data) => { + const majorVersionData = getMajorVersionFromData(majorVersion); + const minorVersionIndex = majorVersionData.releases.findIndex((release) => release.name === minorVersion); + majorVersionData.releases[minorVersionIndex] = data; + updateMajorVersionWithData(majorVersion, majorVersionData); +}; + +const persistVersionData = async () => { + await writeFile('./data/wp_versions.json', JSON.stringify(versionData, null, 4)); +}; + +const getFormatter = (options = {}) => new Intl.DateTimeFormat('en-AU', { + timezone: 'Australia/Perth', + weekday: 'short', + month: 'short', + year: 'numeric', + day: 'numeric', + ...options, +}); + +const getDateParts = (date, options = {}) => { + const formattedDate = getFormatter(options).formatToParts(date); + + return Object.fromEntries(formattedDate.map(({ type, value }) => [type, value])); +}; + +const getFormattedDate = (date) => { + const dateParts = getDateParts(date); + + return `${dateParts.weekday} ${dateParts.day} ${dateParts.month} ${dateParts.year}`; +}; + +const getReleaseDateFromDate = (date) => { + const dateParts = getDateParts(date, { + month: '2-digit', + day: '2-digit', + }); + + return `${dateParts.year}${dateParts.month}${dateParts.day}00`; +}; + +const getDateFormattedForVersionFile = (date) => { + const dateParts = getDateParts(date, { + month: 'long', + day: 'numeric', + }); + + return `${dateParts.day} ${dateParts.month} ${dateParts.year}`; +}; + +const getThreeDigitVersionFromName = (name) => { + const [major, minor] = name.split('.'); + + if (Number(minor) < 10) { + return `${major}0${minor}`; + } + + return `${major}${minor}`; +}; + +const getMajorVersion = async (defaultVersion = null) => { + const { major } = await inquirer.prompt({ + type: 'input', + name: 'major', + message: 'What version do you want to add a release to?', + default: defaultVersion, + validate: (input) => (input.match(/^\d+\.\d+$/) ? true : 'Version must be a number'), + }); + + return major; +}; + +const getRollingVersion = async () => { + const { isRolling } = await inquirer.prompt({ + type: 'confirm', + name: 'isRolling', + message: 'Is this a Rolling release?', + default: false, + }); + + return isRolling; +}; + +const getReleaseDate = async (defaultDate = null) => ( + await inquirer.prompt({ + type: 'input', + name: 'releaseDate', + message: 'What is the expected release date?', + default: defaultDate, + validate: (input) => { + const parsedDate = new Date(input); + + if (Number.isNaN(parsedDate.valueOf())) { + return 'Invalid date. Dates should be in a valid JS Date format.'; + } + + return true; + }, + filter: (input) => new Date(input), + }) +).releaseDate; + +const getFreezeDate = async (releaseDate) => { + const { hasFreezeDate } = await inquirer.prompt({ + name: 'hasFreezeDate', + type: 'confirm', + message: 'Do you want to set a code freeze date?', + default: true, + }); + + if (!hasFreezeDate) { + return null; + } + + const getSuggestedDate = () => getFormattedDate(new Date( + new Date(releaseDate) + .setDate(releaseDate.getDate() - (6 * 7)), + )); + + const { theDate } = await inquirer.prompt({ + type: 'input', + name: 'theDate', + message: 'What is the code freeze date?', + default: getSuggestedDate(), + validate: (input) => { + const parsedDate = new Date(input); + + if (Number.isNaN(parsedDate.valueOf())) { + return 'Invalid date. Dates should be in a valid JS Date format.'; + } + + if (parsedDate > releaseDate) { + return 'Code freeze date must be before the release date'; + } + + return true; + }, + filter: (input) => new Date(input), + }); + + return theDate; +}; + +const getImprovementsandfeaturesEndDate = async (releaseDate, isRolling) => { + if (!isRolling) { + return ''; + } + const getSuggestedDate = () => { + const supportLength = 4; + let calculatedDate; + calculatedDate = new Date(new Date(releaseDate).setMonth(releaseDate.getMonth() + supportLength)); + calculatedDate = new Date(calculatedDate.setDate(calculatedDate.getDate() - 1)); + return getFormattedDate(calculatedDate); + }; + + const { theDate } = await inquirer.prompt({ + type: 'input', + name: 'theDate', + message: 'What is the improvements and new features end date?', + default: getSuggestedDate(), + validate: (input) => { + const parsedDate = new Date(input); + + if (Number.isNaN(parsedDate.valueOf())) { + return 'Invalid date. Dates should be in ISO format.'; + } + + if (parsedDate < releaseDate) { + return 'General Support must be after the release date'; + } + + return true; + }, + filter: (input) => new Date(input), + }); + + return theDate; +}; + +const getGeneralSupportDate = async (releaseDate) => { + const getSuggestedDate = () => { + const supportLength = 12; + let calculatedDate; + calculatedDate = new Date(new Date(releaseDate).setMonth(releaseDate.getMonth() + supportLength)); + calculatedDate = new Date(calculatedDate.setDate(calculatedDate.getDate() - 1)); + return getFormattedDate(calculatedDate); + }; + + const { theDate } = await inquirer.prompt({ + type: 'input', + name: 'theDate', + message: 'What is the general support end date?', + default: getSuggestedDate(), + validate: (input) => { + const parsedDate = new Date(input); + + if (Number.isNaN(parsedDate.valueOf())) { + return 'Invalid date. Dates should be in ISO format.'; + } + + if (parsedDate < releaseDate) { + return 'General Support must be after the release date'; + } + + return true; + }, + filter: (input) => new Date(input), + }); + + return theDate; +}; + +const getSecurityEndDate = async (releaseDate, generalSupportEndDate, isLTS) => { + const getSuggestedDate = () => { + const supportLength = isLTS ? 36 : 18; + let calculatedDate; + calculatedDate = new Date(new Date(releaseDate).setMonth(releaseDate.getMonth() + supportLength)); + calculatedDate = new Date(calculatedDate.setDate(calculatedDate.getDate() - 1)); + return getFormattedDate(calculatedDate); + }; + + const { theDate } = await inquirer.prompt({ + type: 'input', + name: 'theDate', + message: 'What is the security support end date?', + default: getSuggestedDate(), + validate: (input) => { + const parsedDate = new Date(input); + + if (Number.isNaN(parsedDate.valueOf())) { + return 'Invalid date. Dates should be in ISO format.'; + } + + if (parsedDate < generalSupportEndDate) { + return 'Security support must must be after the general support end date'; + } + + return true; + }, + filter: (input) => new Date(input), + }); + + return theDate; +}; + +const getReleaseVersionForMajorMinor = async (releaseDate) => { + const { version } = await inquirer.prompt({ + type: 'input', + name: 'version', + message: 'What is the release version?', + default: getReleaseDateFromDate(releaseDate), + validate: (input) => { + if (input.match(/^\d{10}$/)) { + return true; + } + + return 'Version must be in the format YYYYMMDD00'; + }, + }); + + return version; +}; + +const getNotes = async () => { + const { addNotes } = await inquirer.prompt({ + type: 'confirm', + name: 'addNotes', + message: 'Do you want to add notes?', + default: false, + }); + + if (!addNotes) { + return null; + } + + const { standardNotes } = await inquirer.prompt({ + type: 'expand', + name: 'standardNotes', + message: 'Choose a standard note, or write your own', + choices: [{ + key: 'c', + name: 'Cancel (do not add any notes)', + value: null, + }, { + key: 's', + name: 'Unscheduled minor release', + }, { + key: 'e', + name: 'Support has ended', + }, { + key: 'n', + name: 'Custom', + value: false, + }], + }); + + if (standardNotes || standardNotes === null) { + return standardNotes; + } + + const { notes } = await inquirer.prompt({ + type: 'input', + name: 'notes', + message: 'Enter the notes', + }); + + return notes; +}; + +const addMinorRelease = async ( + confirmAddAnother = false, + suggestedReleaseDate = null, + versionList = [], +) => { + if (confirmAddAnother) { + const { addMinor } = await inquirer.prompt({ + type: 'confirm', + name: 'addMinor', + message: 'Do you want to add another minor release?', + default: false, + }); + if (!addMinor) { + return; + } + } + + const majorVersionName = await getMajorVersion(versionList.length ? versionList.pop() : null); + const isRollingVersion = await getRollingVersion(); + const thisVersionData = getMajorVersionFromData(majorVersionName, isRollingVersion); + + if (!thisVersionData) { + throw new Error(`Major version ${majorVersionName} does not exist`); + } + + const { releases } = thisVersionData; + const lastRelease = releases[releases.length - 1]; + const lastReleaseName = lastRelease.name.split('.'); + const nextReleaseName = `${majorVersionName}.${Number(lastReleaseName[2]) + 1}`; + + const releaseDate = await getReleaseDate(suggestedReleaseDate); + const nextReleaseVersion = await getReleaseVersionForMajorMinor(releaseDate); + + const schema = { + name: nextReleaseName, + releaseDate: getDateFormattedForVersionFile(releaseDate), + version: Number(nextReleaseVersion), + releaseNoteUrl: false, + }; + + const notes = await getNotes(); + + if (notes) { + schema.notes = notes; + } + + console.log(`Adding the following schema for ${majorVersionName}`); + console.log(schema); + + thisVersionData.releases.push(schema); + updateMajorVersionWithData(majorVersionName, thisVersionData, isRollingVersion); + await persistVersionData(); + + addMinorRelease(!versionList.length, releaseDate, versionList); +}; + +const addReleaseMarkdown = async (name, isRolling, isLTS) => { + let releaseName = `Moodle Workplace ${name}`; + let isRollingRelease = ''; + if (isLTS) { + releaseName = `${releaseName} (LTS)`; + } + if (isRolling) { + releaseName = `${releaseName} Rolling`; + isRollingRelease = 'isRolling'; + } + const content = await readFile('./general/wp_releases.md', 'utf8'); + const pointer = ''; + const newRelease = content.replace( + pointer, + `${pointer}\n
    \n## ${releaseName}\n\n`, + ); + await writeFile('./general/wp_releases.md', newRelease, 'utf8'); +}; + +const addMajorRelease = async ( + name, + minors = [], +) => { + console.log('------------------------------------------------------------------------'); + console.log(`Adding a new major version: ${name}`); + console.log('------------------------------------------------------------------------'); + console.log(''); + console.log('Notes:'); + console.log(''); + console.log('- All dates must be in the format DD Month YYYY, for example 24 Feb 2025'); + console.log('- Code freeze dates are typically 6 weeks before the release date.'); + console.log('- Regular releases have an 18-month support period.'); + console.log('- LTS releases have a 3-year support period.'); + console.log(''); + console.log('All end dates are on the release date of that major release.'); + console.log('------------------------------------------------------------------------'); + console.log(''); + if (!name.match(/^\d+\.\d+$/)) { + throw new Error('Major versions must be in the format X.Y'); + } + + if (versionData.versions[name]) { + throw new Error(`Version ${name} already exists`); + } + + const { isLTS } = await inquirer.prompt({ + type: 'confirm', + name: 'isLTS', + message: 'Is this an LTS release?', + default: false, + }); + + const isRolling = await getRollingVersion(); + const releaseDate = await getReleaseDate(); + const codeFreezeDate = await getFreezeDate(releaseDate); + const generalSupportEndDate = await getGeneralSupportDate(releaseDate); + const improvementsandnewfeaturesEndDate = await getImprovementsandfeaturesEndDate(releaseDate, isRolling); + const securityEndDate = await getSecurityEndDate(releaseDate, generalSupportEndDate, isLTS); + + const schema = { + name, + releaseDate: getDateFormattedForVersionFile(releaseDate), + generalEndDate: getDateFormattedForVersionFile(generalSupportEndDate), + securityEndDate: getDateFormattedForVersionFile(securityEndDate), + improvementsandnewfeaturesEndDate: improvementsandnewfeaturesEndDate + ? getDateFormattedForVersionFile(improvementsandnewfeaturesEndDate) + : improvementsandnewfeaturesEndDate, + isLTS, + isRolling, + }; + + if (codeFreezeDate) { + schema.codeFreezeDate = getDateFormattedForVersionFile(codeFreezeDate); + } + + const releaseVersion = await getReleaseVersionForMajorMinor(releaseDate); + + const threeDigitVersion = getThreeDigitVersionFromName(name); + schema.releases = [{ + name: `${name}.0`, + releaseDate: schema.releaseDate, + version: Number(releaseVersion), + upgradePath: `https://docs.moodle.org/${threeDigitVersion}/en/Upgrading`, + releaseNoteUrl: false, + }]; + + versionData.versions.unshift(schema); + + addReleaseMarkdown(name, isRolling, isLTS); + + console.log(`Adding the following schema for ${name}`); + console.log(schema); + await persistVersionData(); + addMinorRelease(!minors.length, releaseDate, minors); +}; + +const releaseVersions = (versions) => { + for (const version of versions) { + const majorVersionName = getMajorVersionNameFromMinor(version); + const majorVersion = getMajorVersionFromData(majorVersionName); + + if (!majorVersion) { + throw new Error(`Version ${version} does not exist`); + } + + const minorVersionIndex = majorVersion.releases.findIndex((release) => release.name === version); + if (minorVersionIndex === -1) { + throw new Error(`Version ${version} does not exist`); + } + + const minorVersionData = majorVersion.releases[minorVersionIndex]; + delete minorVersionData.releaseNoteUrl; + updateMinorVersionWithData(majorVersionName, version, minorVersionData); + } + + persistVersionData(); +}; + +program + .name('Version Manager') + .description('CLI tooling to help manage version data for Moodle releases'); + +program + .command('major [majors...]') + .description( + 'Generate a new major version, and optionally a list of other major releases with upcoming minor releases', + ) + .action(addMajorRelease); + +program + .command('minors [majors...]') + .description('Generate new minor release versions for the supplied list of major releases') + .action((majors) => addMinorRelease(false, null, majors)); + +program + .command('release ') + .description('Mark the supplied minor releases as released by removing the releaseNoteUrl:false property') + .action(releaseVersions); + +program.parse(); diff --git a/sidebars/general.js b/sidebars/general.js index 21d9b5bd4a..c936d783ce 100644 --- a/sidebars/general.js +++ b/sidebars/general.js @@ -193,6 +193,11 @@ const sidebars = { id: 'app_releases', }, }, + { + type: 'doc', + id: 'wp_releases', + label: 'Moodle Workplace Releases', + }, ], }; diff --git a/src/components/ReleaseTableWP/index.tsx b/src/components/ReleaseTableWP/index.tsx new file mode 100755 index 0000000000..e55f794600 --- /dev/null +++ b/src/components/ReleaseTableWP/index.tsx @@ -0,0 +1,108 @@ +/** + * Copyright (c) Moodle Pty Ltd. + * + * Moodle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Moodle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Moodle. If not, see . + */ + +import React from 'react'; +import { MDXProvider } from '@mdx-js/react'; +import { + getVersion, getVersionTitle, type versionInfo, getReleaseStatus, +} from '@site/src/utils/SupportedReleasesWP'; +import Link from '@docusaurus/Link'; +import Admonition from '@theme/Admonition'; + +interface ReleaseTableProps { + releaseName: string, + isRolling?: boolean, +} + +const releaseNoteLink = ( + releaseName: string, + release: versionInfo, + isLms: boolean = false, + isRolling = false, +): null | JSX.Element => { + const isMajorRelease = (release.name.endsWith('.0') || (release.name.match(/\./g) || []).length === 1); + let label = `${isLms ? 'Moodle LMS' : 'Moodle Workplace'} `; + label += `${isMajorRelease ? releaseName : release.name} `; + + if (!isLms && !release.releaseNoteUrl) { + return null; + } + + if (!isLms && typeof release.releaseNoteUrl === 'string') { + label += isRolling ? 'rolling' : ''; + return {label}; + } + + const linkTo = isMajorRelease + ? `/general/releases/${releaseName}` + : `/general/releases/${releaseName}/${release.name}/`; + + return {label}; +}; + +export default function ReleaseTableWP({ releaseName, isRolling = false }: ReleaseTableProps): JSX.Element { + const rows = getVersion(releaseName, isRolling); + const impAndNewFeatEndDate = isRolling ? rows.improvementsandnewfeaturesEndDate : rows.generalEndDate; + + return ( + + + + + + + + + + + + + {rows.releases.map((row) => ( + + + + + + + + ))} + +
    Version nameDateVersion numberMoodle LMS release notesMoodle Workplace release notes
    {getVersionTitle(row.name)}{row.releaseDate}{row.version}{releaseNoteLink(releaseName, row, true, isRolling)}{releaseNoteLink(releaseName, row, false, isRolling)}
    + +

    + {getReleaseStatus(rows) === 'unsupported' ? ( + <> + Support has ended + + ) : ( + <> + Improvements and new features will end + {' '} + {impAndNewFeatEndDate} +
    + Bug fixes and security fixes will end + {' '} + {rows.securityEndDate} + + )} +

    +
    +
    + ); +} diff --git a/src/components/SupportedReleasesWP/index.tsx b/src/components/SupportedReleasesWP/index.tsx new file mode 100644 index 0000000000..b1fc291670 --- /dev/null +++ b/src/components/SupportedReleasesWP/index.tsx @@ -0,0 +1,78 @@ +/** + * Copyright (c) Moodle Pty Ltd. + * + * Moodle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Moodle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Moodle. If not, see . + */ + +import React from 'react'; +import { MDXProvider } from '@mdx-js/react'; +import styles from './styles.module.css'; +import { + type majorVersionData, + getSupportedReleases, + getReleaseStatus, + getLatestRelease, + getReleaseStatusLabel, + getVersionLabel, +} from '@site/src/utils/SupportedReleasesWP'; + +export { + styles, +}; + +export default function SupportedReleasesWP(): JSX.Element { + const rows = getSupportedReleases() + .filter((versionData: majorVersionData) => versionData.hidden !== true) + .map((versionData: majorVersionData) => { + const releaseStatus = getReleaseStatus(versionData); + return { + name: versionData.name, + version: getVersionLabel(versionData.name, versionData.isLTS, versionData.isRolling), + latestRelease: getLatestRelease(versionData), + generalSupportEnds: versionData.generalEndDate, + securitySupportEnds: versionData.securityEndDate, + improvementsandnewfeaturesEndDate: versionData.improvementsandnewfeaturesEndDate, + releaseStatusLabel: getReleaseStatusLabel(releaseStatus), + }; + }); + + return ( + + + + + + + + + + + + + {rows.map((row) => ( + + + + + + + + ))} + +
    VersionLatest ReleaseImprovements and new featuresBug fixesSecurity fixes
    {row.version}{row.latestRelease}{row.improvementsandnewfeaturesEndDate}{row.generalSupportEnds}{row.securitySupportEnds}
    +
    + ); +} diff --git a/src/components/SupportedReleasesWP/styles.module.css b/src/components/SupportedReleasesWP/styles.module.css new file mode 100644 index 0000000000..019e0798c8 --- /dev/null +++ b/src/components/SupportedReleasesWP/styles.module.css @@ -0,0 +1,3 @@ +.moodle-workplace-release { + background-color: #b7d5e7; +} diff --git a/src/utils/SupportedReleasesWP.ts b/src/utils/SupportedReleasesWP.ts new file mode 100644 index 0000000000..39763351fd --- /dev/null +++ b/src/utils/SupportedReleasesWP.ts @@ -0,0 +1,188 @@ +/** + * Copyright (c) Moodle Pty Ltd. + * + * Moodle is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Moodle is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Moodle. If not, see . + */ + +import VersionData from '@site/data/wp_versions.json'; + +const Versions = VersionData.versions; +const today = new Date(); + +export interface versionInfo { + name: string, + releaseDate: string, + version: boolean | number, + notes?: string, + releaseNoteUrl?: boolean | string, + upgradePath?: boolean | string, +} + +export interface majorVersionData { + name: string, + hidden?: boolean, + codeFreezeDate?: string, + releaseDate: string, + improvementsandnewfeaturesEndDate: string, + generalEndDate: string, + securityEndDate: string, + extendedSecurityEndDate?: string, + isLTS: boolean, + isRolling: boolean, + isExperimental: boolean, + releases?: Array +} + +export const isSupported = (versionData: majorVersionData): boolean => { + if (versionData.extendedSecurityEndDate) { + return (new Date(versionData.extendedSecurityEndDate)) > today; + } else if (versionData.isExperimental) { + // Do not display experimental releases in the version support info. + return false; + } + + return (new Date(versionData.securityEndDate)) > today; +}; + +export const getReleaseStatus = (versionData: majorVersionData, releaseName: string = null): string => { + if (releaseName && releaseName.split('.').length > 2) { + const releaseData = versionData?.releases.find((release) => release.name === releaseName); + if (!releaseData) { + // If there is a releaseName for a minor release, but no release data for it, + // then it has not yet been added and is a future relesae. + return 'future-stable'; + } + + if ((new Date(releaseData.releaseDate)) > today) { + return 'future-stable'; + } + } + + if ((new Date(versionData.releaseDate)) > today) { + return 'future'; + } + + if ((new Date(versionData.generalEndDate)) > today) { + return 'current'; + } + + if ((new Date(versionData.securityEndDate)) > today) { + return 'security'; + } + + if (versionData.extendedSecurityEndDate && (new Date(versionData.extendedSecurityEndDate)) > today) { + return 'security'; + } + + return 'unsupported'; +}; + +export const getReleaseStatusLabel = (status: string): string => { + if (status === 'future') { + return 'Future release'; + } + + if (status === 'current') { + return 'Current stable'; + } + + if (status === 'security') { + return 'Current security'; + } + + return 'Not supported'; +}; + +export const getTitle = (majorVersion: string, versionData: majorVersionData): string => { + if (versionData.isLTS) { + return `Moodle Workplace ${majorVersion} (LTS)`; + } + + if (versionData.isRolling) { + return `Moodle Workplace ${majorVersion} Rolling`; + } + + return `Moodle Workplace ${majorVersion}`; +}; + +export const getVersionTitle = (versionName: string, isLTS: boolean = false, isRolling: boolean = false): string => { + if (isLTS) { + return `Moodle Workplace ${versionName} (LTS)`; + } + + if (isRolling) { + return `Moodle Workplace ${versionName} Rolling`; + } + + return `Moodle Workplace ${versionName}`; +}; + +export const getVersionLabel = (versionName: string, isLTS: boolean = false, isRolling: boolean = false): string => { + if (isLTS) { + return `${versionName} (LTS)`; + } + + if (isRolling) { + return `${versionName} Rolling`; + } + + return versionName; +}; + +export const getAllVersions = (): Array => Array(...Versions).map((version) => { + version.releases = version?.releases?.map((release) => ({ + releaseNoteUrl: null, + upgradePath: null, + ...release, + })); + + return version; +}); + +export const getSupportedReleases = (): Array => ( + getAllVersions().filter((versionData: majorVersionData) => isSupported(versionData)) +); + +export const getVersion = (versionName: string, isRolling: boolean): majorVersionData => { + const [major, release] = versionName.split('.'); + const majorVersion = `${major}.${release}`; + return getAllVersions().find((version) => version.name === majorVersion && version.isRolling === isRolling); +}; + +export const getRelease = (versionName: string): versionInfo | null => { + const [major, release] = versionName.split('.'); + const majorVersionName = `${major}.${release}`; + const majorVersion = getAllVersions().find((version) => version.name === majorVersionName); + + if (!majorVersion) { + return null; + } + + return majorVersion.releases.find((versionInfo) => versionInfo.name === versionName); +}; + +export const getLatestRelease = (versionData: majorVersionData): string => { + if (!versionData?.releases || versionData.releases.length === 0) { + return ''; + } + + const latestRelease = versionData.releases.reduce((latest, current) => { + if (new Date(current.releaseDate) > new Date(latest.releaseDate)) { + return current; + } + return latest; + }, versionData.releases[0]); + + return latestRelease.releaseDate; +}; diff --git a/static/schema/wp_versions.json b/static/schema/wp_versions.json new file mode 100644 index 0000000000..5a2a23e3ca --- /dev/null +++ b/static/schema/wp_versions.json @@ -0,0 +1,122 @@ +{ + "title": "JSON schema for the Moodle Workplace Release Data", + "$id": "https://moodledev.io/schema/wp_versions.json", + "$schema": "https://json-schema.org/draft/2019-09/schema", + "type": "object", + "properties": { + "versions": { + "type": "array", + "items": { + "$ref": "#/$defs/version" + } + } + }, + "required": [ + "versions" + ], + "$defs": { + "version": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "releaseDate": { + "type": "string" + }, + "codeFreezeDate": { + "type": "string" + }, + "improvementsandnewfeaturesEndDate": { + "type": "string" + }, + "generalEndDate": { + "type": "string" + }, + "securityEndDate": { + "type": "string" + }, + "extendedSecurityEndDate": { + "type": "string" + }, + "isLTS": { + "type": "boolean" + }, + "isRolling": { + "type": "boolean" + }, + "isExperimental": { + "type": "boolean" + }, + "releases": { + "type": "array", + "items": { + "$ref": "#/$defs/release" + } + }, + "hidden": { + "type": "boolean" + } + }, + "required": [ + "name", + "releaseDate", + "generalEndDate", + "securityEndDate" + ], + "additionalProperties": false, + "unevaluatedProperties": false + }, + "release": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "releaseDate": { + "type": "string" + }, + "version": { + "oneOf": [ + { + "type": "number" + }, + { + "type": "boolean" + } + ] + }, + "notes": { + "type": "string" + }, + "upgradePath": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "boolean" + } + ] + }, + "releaseNoteUrl": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "boolean" + } + ] + } + }, + "required": [ + "name", + "releaseDate", + "version" + ], + "additionalProperties": false, + "unevaluatedProperties": false + } + } +}