MegaBites-AI/Windows-powershell
0372
1# Copyright (c) Microsoft Corporation.2# Licensed under the MIT License.3 4Describe "Linux Package Name Validation" {5 BeforeAll {6 # Determine artifacts directory (GitHub Actions or Azure DevOps)7 $artifactsDir = if ($env:GITHUB_ACTIONS -eq 'true') {8 "$env:GITHUB_WORKSPACE/../packages"9 } else {10 $env:SYSTEM_ARTIFACTSDIRECTORY11 }12 13 if (-not $artifactsDir) {14 throw "Artifacts directory not found. GITHUB_WORKSPACE or SYSTEM_ARTIFACTSDIRECTORY must be set."15 }16 17 Write-Verbose "Artifacts directory: $artifactsDir" -Verbose18 }19 20 Context "RPM Package Names" {21 It "Should have valid RPM package names" {22 $rpmPackages = Get-ChildItem -Path $artifactsDir -Recurse -Filter *.rpm -ErrorAction SilentlyContinue23 24 $rpmPackages.Count | Should -BeGreaterThan 0 -Because "At least one RPM package should exist in the artifacts directory"25 26 $invalidPackages = @()27 # Regex pattern for valid RPM package names.28 # Breakdown:29 # ^powershell\- : Starts with 'powershell-'30 # (preview-|lts-)? : Optionally 'preview-' or 'lts-'31 # \d+\.\d+\.\d+ : Version number (e.g., 7.6.0)32 # (_[a-z]*\.\d+)? : Optional underscore, letters, dot, and digits (e.g., _alpha.1)33 # -1\. : Literal '-1.'34 # (preview\.\d+\.)? : Optional 'preview.' and digits, followed by a dot35 # (rh|cm)\. : Either 'rh.' or 'cm.'36 # (x86_64|aarch64)\.rpm$ : Architecture and file extension37 $rpmPackageNamePattern = 'powershell\-(preview-|lts-)?\d+\.\d+\.\d+(_[a-z]*\.\d+)?-1\.(preview\.\d+\.)?(rh|cm)\.(x86_64|aarch64)\.rpm'38 39 foreach ($package in $rpmPackages) {40 if ($package.Name -notmatch $rpmPackageNamePattern) {41 $invalidPackages += "$($package.Name) is not a valid RPM package name"42 Write-Warning "$($package.Name) is not a valid RPM package name"43 }44 }45 46 if ($invalidPackages.Count -gt 0) {47 throw ($invalidPackages | Out-String)48 }49 }50 }51 52 Context "DEB Package Names" {53 It "Should have valid DEB package names" {54 $debPackages = Get-ChildItem -Path $artifactsDir -Recurse -Filter *.deb -ErrorAction SilentlyContinue55 56 $debPackages.Count | Should -BeGreaterThan 0 -Because "At least one DEB package should exist in the artifacts directory"57 58 $invalidPackages = @()59 # Regex pattern for valid DEB package names.60 # Valid examples:61 # - powershell-preview_7.6.0-preview.6-1.deb_amd64.deb62 # - powershell-lts_7.4.13-1.deb_amd64.deb63 # - powershell_7.4.13-1.deb_amd64.deb64 # Breakdown:65 # ^powershell : Starts with 'powershell'66 # (-preview|-lts)? : Optionally '-preview' or '-lts'67 # _\d+\.\d+\.\d+ : Underscore followed by version number (e.g., _7.6.0)68 # (-[a-z]+\.\d+)? : Optional dash, letters, dot, and digits (e.g., -preview.6)69 # -1 : Literal '-1'70 # \.deb_ : Literal '.deb_'71 # (amd64|arm64) : Architecture72 # \.deb$ : File extension73 $debPackageNamePattern = '^powershell(-preview|-lts)?_\d+\.\d+\.\d+(-[a-z]+\.\d+)?-1\.deb_(amd64|arm64)\.deb$'74 75 foreach ($package in $debPackages) {76 if ($package.Name -notmatch $debPackageNamePattern) {77 $invalidPackages += "$($package.Name) is not a valid DEB package name"78 Write-Warning "$($package.Name) is not a valid DEB package name"79 }80 }81 82 if ($invalidPackages.Count -gt 0) {83 throw ($invalidPackages | Out-String)84 }85 }86 }87 88 Context "Tar.Gz Package Names" {89 It "Should have valid tar.gz package names" {90 $tarPackages = Get-ChildItem -Path $artifactsDir -Recurse -Filter *.tar.gz -ErrorAction SilentlyContinue91 92 $tarPackages.Count | Should -BeGreaterThan 0 -Because "At least one tar.gz package should exist in the artifacts directory"93 94 $invalidPackages = @()95 foreach ($package in $tarPackages) {96 # Pattern matches: powershell-7.6.0-preview.6-linux-x64.tar.gz or powershell-7.6.0-linux-x64.tar.gz97 # Also matches various runtime configurations98 if ($package.Name -notmatch 'powershell-(lts-)?\d+\.\d+\.\d+\-([a-z]*.\d+\-)?(linux|osx|linux-musl)+\-(x64\-fxdependent|x64|arm32|arm64|x64\-musl-noopt\-fxdependent)\.(tar\.gz)') {99 $invalidPackages += "$($package.Name) is not a valid tar.gz package name"100 Write-Warning "$($package.Name) is not a valid tar.gz package name"101 }102 }103 104 if ($invalidPackages.Count -gt 0) {105 throw ($invalidPackages | Out-String)106 }107 }108 }109 110 Context "Package Existence" {111 It "Should find at least one package in artifacts directory" {112 $allPackages = Get-ChildItem -Path $artifactsDir -Recurse -Include *.rpm, *.tar.gz, *.deb -ErrorAction SilentlyContinue113 114 $allPackages.Count | Should -BeGreaterThan 0 -Because "At least one package should exist in the artifacts directory"115 }116 }117}118 