|
182 | 182 | return `${date.getUTCFullYear()}-${pad(date.getUTCMonth() + 1)}-${pad(date.getUTCDate())} ${pad(date.getUTCHours())}:${pad(date.getUTCMinutes())} UTC` |
183 | 183 | } |
184 | 184 |
|
| 185 | + function parseReleaseTimestamp(value) { |
| 186 | + const text = String(value || '').trim() |
| 187 | + if (!text) return 0 |
| 188 | +
|
| 189 | + const date = new Date(text) |
| 190 | + return Number.isNaN(date.getTime()) ? 0 : date.getTime() |
| 191 | + } |
| 192 | +
|
185 | 193 | function expandRelease(release) { |
186 | 194 | if (release?.draft) return [] |
187 | 195 |
|
188 | 196 | const releaseName = release?.name || release?.tag_name || 'Matrix OS Release' |
| 197 | + const releaseTimestamp = parseReleaseTimestamp(release?.published_at || release?.created_at) |
189 | 198 |
|
190 | 199 | return (release?.assets || []) |
191 | 200 | .filter((asset) => hasFirmwarePackageSuffix(asset?.name) && /MystrixSim/i.test(asset.name)) |
|
196 | 205 | version: release?.tag_name || '—', |
197 | 206 | buildHash: extractBuildHash(release?.tag_name, asset?.name, release?.target_commitish), |
198 | 207 | date: formatReleaseDateTime(release?.published_at || release?.created_at), |
| 208 | + releaseTimestamp, |
199 | 209 | assetName: asset.name, |
200 | 210 | assetApiUrl: asset.url, |
201 | 211 | assetDownloadUrl: asset.browser_download_url, |
|
220 | 230 | throw new Error('GitHub releases returned an unexpected payload.') |
221 | 231 | } |
222 | 232 |
|
223 | | - releaseFirmware = payload.flatMap(expandRelease) |
| 233 | + releaseFirmware = payload |
| 234 | + .flatMap(expandRelease) |
| 235 | + .sort((left, right) => { |
| 236 | + if (right.releaseTimestamp !== left.releaseTimestamp) { |
| 237 | + return right.releaseTimestamp - left.releaseTimestamp |
| 238 | + } |
| 239 | + return String(left.assetName || '').localeCompare(String(right.assetName || '')) |
| 240 | + }) |
224 | 241 | } catch (error) { |
225 | 242 | releaseFirmware = [] |
226 | 243 | releasesError = error instanceof Error ? error.message : String(error) |
|
0 commit comments