@@ -77,6 +77,59 @@ const fetchReleases = async (githubToken) => {
7777 JSON . stringify ( release . node , null , 2 )
7878 ) ;
7979 } ) ;
80+
81+ // sort releases by major version eg : {"1": [], "2": [], "3": [], "4": []}
82+ const sortedReleases = releases . reduce ( ( acc , release ) => {
83+ const majorVersion = release . node . tagName . replace ( / p r o c e s s i n g ( - \d + ) ? - / , '' ) . split ( '.' ) [ 0 ] ;
84+ if ( ! acc [ majorVersion ] ) {
85+ acc [ majorVersion ] = [ ] ;
86+ }
87+ acc [ majorVersion ] . push ( release . node ) ;
88+ return acc ;
89+ } , { } ) ;
90+
91+ // sort releases by date within each major version
92+ Object . keys ( sortedReleases ) . forEach ( ( key ) => {
93+ sortedReleases [ key ] . sort ( ( a , b ) => new Date ( b . publishedAt ) - new Date ( a . publishedAt ) ) ;
94+ } ) ;
95+
96+ // genereate the content/download/selected.json e.g.
97+ // {
98+ // "selectedReleases": [
99+ // "processing-1310-4.4.10",
100+ // "processing-0270-3.5.4",
101+ // "processing-0227-2.2.1"
102+ // ],
103+ // "selectedPreReleases": [
104+ // ""
105+ // ]
106+ // }
107+ // select the latest release for each major version
108+ const selectedReleases = Object . values ( sortedReleases ) . map (
109+ ( releases ) => releases [ 0 ] . tagName
110+ ) ;
111+ const latestStableRelease = releases . toSorted ( ( a , b ) => new Date ( b . node . publishedAt ) - new Date ( a . node . publishedAt ) ) [ 0 ] . node ;
112+
113+ // select the latest pre-release from processing4 if it is newer than the latest stable release
114+ const preReleases = processing4 . releases . edges . filter (
115+ ( release ) => release . node . isPrerelease && new Date ( release . node . publishedAt ) > new Date ( latestStableRelease . publishedAt )
116+ ) ;
117+ const selectedPreReleases = preReleases . length
118+ ? [ preReleases [ 0 ] . node . tagName ]
119+ : [ "" ] ;
120+ fs . writeFileSync (
121+ path . join ( __dirname , '..' , 'content' , 'download' , 'selected.json' ) ,
122+ JSON . stringify (
123+ {
124+ selectedReleases,
125+ selectedPreReleases
126+ } ,
127+ null ,
128+ 2
129+ )
130+ ) ;
131+
132+
80133} ;
81134
82135if ( process . env . GITHUB_TOKEN ) {
0 commit comments