Skip to content

Commit a0d1059

Browse files
Update test-example.ps1
1 parent b617fa4 commit a0d1059

File tree

1 file changed

+152
-32
lines changed

1 file changed

+152
-32
lines changed

test-example.ps1

Lines changed: 152 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
1450
function Install-Packages {
1551
param (
1652
[string]$folderName,
@@ -20,9 +56,9 @@ function Install-Packages {
2056

2157
Write-Output "`nInstalling 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 "`nBuilding the project in folder: $folderName"
43-
79+
4480
npm run build
4581
if (-not $?) {
4682
Write-Error "`nERROR: 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 "`nNo 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 "`nFound solution file: $($slnFile.FullName)"
126-
127-
try {
128-
Write-Output "`nBuilding 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 "`nBuild 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 "`nERROR: $_"
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 "`nCompleted .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

147267
function 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

157277
Write-BuildInfo
158278
Process-JavaScriptProjects -buildVersion $global:BUILD_VERSION
159-
Process-DotNetProjects
279+
Process-AspNetCoreProject -buildVersion $global:BUILD_VERSION
160280

161281
Write-Output "`nFinished testing version: $global:BUILD_VERSION. Error code: $global:ERROR_CODE"
162282
if ($global:ERROR_CODE -ne 0 -and $global:FAILED_PROJECTS.Count -gt 0) {

0 commit comments

Comments
 (0)