@@ -11,6 +11,42 @@ $global:BUILD_VERSION = $buildVersion
1111$global :ERROR_CODE = 0
1212$global :FAILED_PROJECTS = @ ()
1313
14+ function Test-NpmVersionExists {
15+ param ([string ]$Pkg , [string ]$Ver )
16+ npm view " $Pkg @$Ver " > $null 2>&1
17+ return ($LASTEXITCODE -eq 0 )
18+ }
19+
20+ function Get-ValidNpmVersion {
21+ param (
22+ [string ]$PackageName ,
23+ [string ]$Version
24+ )
25+
26+ Write-Host " Checking $PackageName @$Version ..."
27+ if (Test-NpmVersionExists - Pkg $PackageName - Ver $Version ) {
28+ Write-Host " $PackageName @$Version exists."
29+ return $Version
30+ }
31+
32+ try {
33+ $v = [version ]$Version
34+ $fallback = " $ ( $v.Major ) .$ ( $v.Minor ) -stable"
35+ } catch {
36+ Write-Host " Invalid version format: $Version "
37+ return $null
38+ }
39+
40+ Write-Host " $PackageName @$Version not found. Trying fallback: $PackageName @$fallback ..."
41+ if (Test-NpmVersionExists - Pkg $PackageName - Ver $fallback ) {
42+ Write-Host " $PackageName @$fallback exists (fallback)."
43+ return $fallback
44+ }
45+
46+ Write-Host " Neither $PackageName @$Version nor @$fallback exist."
47+ return $null
48+ }
49+
1450function Install-Packages {
1551 param (
1652 [string ]$folderName ,
@@ -20,9 +56,9 @@ function Install-Packages {
2056
2157 Write-Output " `n Installing packages in folder: $folderName "
2258
23- # Loop through each package and install it individually
2459 foreach ($package in $packages ) {
25- $packageWithVersion = " $package @$buildVersion "
60+ $packageVersion = Get-ValidNpmVersion - PackageName $package - Version $buildVersion
61+ $packageWithVersion = " $package @$packageVersion "
2662 Write-Output " Installing $packageWithVersion ..."
2763
2864 npm install -- save -- save-exact -- no- fund -- loglevel= error -- force $packageWithVersion
@@ -40,7 +76,7 @@ function Build-Project {
4076 [string ]$folderName
4177 )
4278 Write-Output " `n Building the project in folder: $folderName "
43-
79+
4480 npm run build
4581 if (-not $? ) {
4682 Write-Error " `n ERROR: Failed to build the project in $folderName "
@@ -62,7 +98,7 @@ function Process-JavaScriptProjects {
6298
6399 $jQueryEntry = @ {
64100 Name = " jQuery" ;
65- Packages = if ([version ]$buildVersion -ge [version ]23.1 ) { # `devextreme-dist` appeared in 23.1
101+ Packages = if ([version ]$buildVersion -ge [version ]23.1 ) {
66102 @ (" devextreme" , " devextreme-dist" )
67103 } else {
68104 @ (" devextreme" )
@@ -107,56 +143,140 @@ function Process-JavaScriptProjects {
107143 Write-Output " `n --== JavaScript Projects Processing Completed ==--"
108144}
109145
110- function Process-DotNetProjects {
146+ function Resolve-NuGetVersionWithFallback {
111147 param (
112- [string ]$RootDirectory = " ."
148+ [string ]$PackageName ,
149+ [string ]$RequestedVersion
113150 )
114151
115- Write-Output " `n --== Starting .NET project processing in directory: $RootDirectory ==--"
152+ function Test-PackageAvailable {
153+ param ([string ]$name , [string ]$ver )
154+ dotnet add package $name -- version $ver > $null 2>&1
155+ return ($LASTEXITCODE -eq 0 )
156+ }
157+
158+ if (Test-PackageAvailable - name $PackageName - ver $RequestedVersion ) {
159+ Write-Host " $PackageName @$RequestedVersion is available."
160+ return $RequestedVersion
161+ }
116162
117- $slnFiles = Get-ChildItem - Path $RootDirectory - Filter * .sln - Recurse - Depth 1
163+ Write-Host " $PackageName @ $RequestedVersion not found. Checking for -beta and -alpha versions... "
118164
119- if ($slnFiles.Count -eq 0 ) {
120- Write-Output " `n No solution files (.sln) found in the specified directory at level 1."
165+ $suffixes = @ (" beta" , " alpha" )
166+ foreach ($suffix in $suffixes ) {
167+ $fallbackVersion = " $RequestedVersion -$suffix "
168+ if (Test-PackageAvailable - name $PackageName - ver $fallbackVersion ) {
169+ Write-Host " Found $PackageName @$fallbackVersion "
170+ return $fallbackVersion
171+ }
172+ }
173+
174+ Write-Warning " No matching versions found for $PackageName @$RequestedVersion "
175+ return $null
176+ }
177+
178+ function Process-AspNetCoreProject {
179+ param (
180+ [Parameter (Mandatory = $true )]
181+ [string ]$buildVersion
182+ )
183+
184+ $folderPath = Get-ChildItem - Directory |
185+ Where-Object { $_.Name -match ' (?i)^ASP\.NET\s*Core$' } |
186+ Select-Object - First 1 - ExpandProperty FullName
187+
188+ if (-not $folderPath ) {
189+ Write-Error " Directory matching 'ASP.NET Core' not found."
121190 return
122191 }
123192
124- foreach ($slnFile in $slnFiles ) {
125- Write-Output " `n Found solution file: $ ( $slnFile.FullName ) "
126-
127- try {
128- Write-Output " `n Building solution: $ ( $slnFile.FullName ) "
129- dotnet build $slnFile.FullName - c Release
193+ Write-Host " Found project directory: $folderPath "
194+ Push-Location $folderPath
195+
196+ try {
197+ $resolvedNugetVersion = Resolve-NuGetVersionWithFallback - PackageName " DevExtreme.AspNet.Core" - RequestedVersion $buildVersion
198+ if (-not $resolvedNugetVersion ) {
199+ throw " No valid version found for DevExtreme.AspNet.Core"
200+ }
201+
202+ Write-Host " Installing DevExtreme.AspNet.Core@$resolvedNugetVersion ..."
203+ dotnet add package DevExtreme.AspNet.Core -- version $resolvedNugetVersion
204+
205+ $packageJsonPath = Get-ChildItem - Path $folderPath - Filter " package.json" - Recurse - File - ErrorAction SilentlyContinue |
206+ Select-Object - First 1 - ExpandProperty FullName
207+
208+ if ($packageJsonPath ) {
209+ Write-Host " Found package.json: $packageJsonPath "
210+
211+ try {
212+ $packageJson = Get-Content - Path $packageJsonPath - Raw | ConvertFrom-Json
213+ $updated = $false
130214
131- if ($? ) {
132- Write-Output " `n Build succeeded for $ ( $slnFile.FullName ) ."
133- } else {
134- throw " Build failed for $ ( $slnFile.FullName ) ."
215+ if ($packageJson.dependencies.devextreme ) {
216+ $validDevextremeVersion = Get-ValidNpmVersion - PackageName " devextreme" - Version $buildVersion
217+ if ($validDevextremeVersion ) {
218+ $packageJson.dependencies.devextreme = $validDevextremeVersion
219+ $updated = $true
220+ }
221+ }
222+
223+ if ($packageJson.dependencies .' devextreme-dist' ) {
224+ $validDevextremeDistVersion = Get-ValidNpmVersion - PackageName " devextreme-dist" - Version $buildVersion
225+ if ($validDevextremeDistVersion ) {
226+ $packageJson.dependencies .' devextreme-dist' = $validDevextremeDistVersion
227+ $updated = $true
228+ }
229+ }
230+
231+ if ($updated ) {
232+ $packageJson | ConvertTo-Json - Depth 10 | Set-Content - Path $packageJsonPath - Encoding UTF8
233+ Write-Host " Updated package.json with valid versions."
234+ } else {
235+ Write-Host " No matching dependencies found in package.json to update."
236+ }
237+
238+ Write-Host " Installing NPM dependencies..."
239+ npm install -- save -- save-exact -- no- fund -- loglevel= error
240+ if (-not $? ) {
241+ throw " Failed to install npm dependencies"
242+ }
243+ } catch {
244+ Write-Error " Failed to update package.json: $_ "
135245 }
136- } catch {
137- Write-Error " `n ERROR: $_ "
138- $global :LASTEXITCODE = 1
139- $global :ERROR_CODE = 1
140- $global :FAILED_PROJECTS += " ASP.NET"
246+ } else {
247+ Write-Warning " No package.json file found in '$folderPath '."
141248 }
142- }
143249
144- Write-Output " `n Completed .NET project processing."
250+ Write-Host " Running dotnet build..."
251+ dotnet build
252+ if ($LASTEXITCODE -eq 0 ) {
253+ Write-Host " Build succeeded."
254+ } else {
255+ throw
256+ }
257+ } catch {
258+ Write-Error " An error occurred: $_ "
259+ $global :LASTEXITCODE = 1
260+ $global :ERROR_CODE = 1
261+ $global :FAILED_PROJECTS += " ASP.NET Core"
262+ } finally {
263+ Pop-Location
264+ }
145265}
146266
147267function Write-BuildInfo {
148- $BUILD_VERSION = if ($global :BUILD_VERSION -ne $null -and $global :BUILD_VERSION -ne " " ) {
149- $global :BUILD_VERSION
150- } else {
151- " (empty)"
268+ $BUILD_VERSION = if ($global :BUILD_VERSION -ne $null -and $global :BUILD_VERSION -ne " " ) {
269+ $global :BUILD_VERSION
270+ } else {
271+ " (empty)"
152272 }
153273
154274 Write-Output " Build Version: $BUILD_VERSION "
155275}
156276
157277Write-BuildInfo
158278Process - JavaScriptProjects - buildVersion $global :BUILD_VERSION
159- Process - DotNetProjects
279+ Process - AspNetCoreProject - buildVersion $ global :BUILD_VERSION
160280
161281Write-Output " `n Finished testing version: $global :BUILD_VERSION . Error code: $global :ERROR_CODE "
162282if ($global :ERROR_CODE -ne 0 -and $global :FAILED_PROJECTS.Count -gt 0 ) {
0 commit comments