@@ -54,6 +54,17 @@ function assetFileName(version, variant, arch) {
5454 return `NETworkManager_${ version } ${ suffix } _win-${ arch } ${ ext } ` ;
5555}
5656
57+ // DEPRECATED: only exists to read releases published before the arch split
58+ // (native ARM64 build, #3538), which shipped a single, x64-only asset with no
59+ // "_win-<arch>" part in the name. Every release going forward uses
60+ // assetFileName() instead. Safe to delete once no release predating #3538 is
61+ // still linked to from the website (i.e. once release.json itself has moved
62+ // past 2026.7.7.0).
63+ function legacyAssetFileName ( version , variant ) {
64+ const { suffix, ext } = VARIANTS [ variant ] ;
65+ return `NETworkManager_${ version } ${ suffix } ${ ext } ` ;
66+ }
67+
5768function ghHeaders ( ) {
5869 const headers = {
5970 "User-Agent" : "NETworkManager-website-build" ,
@@ -90,11 +101,22 @@ async function fetchChecksumMap(version) {
90101 for ( const line of text . split ( / \r ? \n / ) ) {
91102 const m = line . trim ( ) . match ( / ^ ( [ 0 - 9 a - f A - F ] { 64 } ) \s + ( .+ ) $ / ) ;
92103 if ( ! m ) continue ;
104+ let matched = false ;
93105 for ( const arch of ARCHITECTURES ) {
94106 for ( const variant of Object . keys ( VARIANTS ) ) {
95107 if ( m [ 2 ] === assetFileName ( version , variant , arch ) ) {
96108 map [ arch ] ??= { } ;
97109 map [ arch ] [ variant ] = m [ 1 ] . toUpperCase ( ) ;
110+ matched = true ;
111+ }
112+ }
113+ }
114+ // DEPRECATED fallback — see legacyAssetFileName().
115+ if ( ! matched ) {
116+ for ( const variant of Object . keys ( VARIANTS ) ) {
117+ if ( m [ 2 ] === legacyAssetFileName ( version , variant ) ) {
118+ map . x64 ??= { } ;
119+ map . x64 [ variant ] = m [ 1 ] . toUpperCase ( ) ;
98120 }
99121 }
100122 }
@@ -107,13 +129,24 @@ async function fetchChecksumMap(version) {
107129// asset (older releases predate ARM64 support and won't have one).
108130function buildDownloads ( release , version ) {
109131 const downloads = { } ;
110- for ( const arch of ARCHITECTURES ) {
111- for ( const variant of Object . keys ( VARIANTS ) ) {
132+ for ( const variant of Object . keys ( VARIANTS ) ) {
133+ let matched = false ;
134+ for ( const arch of ARCHITECTURES ) {
112135 const name = assetFileName ( version , variant , arch ) ;
113136 const asset = release . assets . find ( ( a ) => a . name === name ) ;
114137 if ( asset ) {
115138 downloads [ arch ] ??= { } ;
116139 downloads [ arch ] [ variant ] = asset . browser_download_url ;
140+ matched = true ;
141+ }
142+ }
143+ // DEPRECATED fallback — see legacyAssetFileName().
144+ if ( ! matched ) {
145+ const legacyName = legacyAssetFileName ( version , variant ) ;
146+ const asset = release . assets . find ( ( a ) => a . name === legacyName ) ;
147+ if ( asset ) {
148+ downloads . x64 ??= { } ;
149+ downloads . x64 [ variant ] = asset . browser_download_url ;
117150 }
118151 }
119152 }
0 commit comments