diff --git a/.gitignore b/.gitignore index 135cea5b..cd418d0e 100644 --- a/.gitignore +++ b/.gitignore @@ -31,6 +31,11 @@ bld/ [Ll]og/ [Ll]ogs/ +# These are the PowerShell helper libraries used to run. Added to artifact as automated task +Tools/PowershellModule/src/Library/ARMTemplate +Tools/PowershellModule/src/Library/RestAPI +Tools/PowershellModule/src/Library/WinGet.RestSource.PowerShellSupport + # Visual Studio 2015/2017 cache/options directory .vs/ # Uncomment if you have tasks that create the project's static files in wwwroot diff --git a/Tools/PowershellModule/src/Library/Add-WinGetManifest.ps1 b/Tools/PowershellModule/src/Library/Add-WinGetManifest.ps1 index d7b599a3..8f8f6048 100644 --- a/Tools/PowershellModule/src/Library/Add-WinGetManifest.ps1 +++ b/Tools/PowershellModule/src/Library/Add-WinGetManifest.ps1 @@ -93,6 +93,7 @@ Function Add-WinGetManifest Write-Verbose -Message "Retrieving a copy of the app Manifest file for submission to WinGet source." $ApplicationManifest = Get-WinGetManifest -Path $Path if(!$ApplicationManifest) { + Write-Verbose "$ApplicationManifest`n`n`n" throw "Failed to retrieve a proper manifest. Verify and try again." } diff --git a/Tools/PowershellModule/src/Library/Get-WinGetManifest.ps1 b/Tools/PowershellModule/src/Library/Get-WinGetManifest.ps1 index 4d71e484..b8c2a716 100644 --- a/Tools/PowershellModule/src/Library/Get-WinGetManifest.ps1 +++ b/Tools/PowershellModule/src/Library/Get-WinGetManifest.ps1 @@ -277,10 +277,18 @@ Function Get-WinGetManifest if($WinGetDesktopAppInstallerLibLoaded) { Write-Verbose -Message "YAML Files have been found in the target directory. Building a JSON manifest with found files." if($Json){ + Write-Verbose "JSON" $Return += [Microsoft.WinGet.RestSource.PowershellSupport.YamlToRestConverter]::AddManifestToPackageManifest($Path, $JSON.GetJson()); } else{ - $Return += [Microsoft.WinGet.RestSource.PowershellSupport.YamlToRestConverter]::AddManifestToPackageManifest($Path, ""); + Write-Verbose "Other" + try { + $Return += [Microsoft.WinGet.RestSource.PowershellSupport.YamlToRestConverter]::AddManifestToPackageManifest($Path, ""); + } + catch { + Write-Verbose "Attempt to convert YAML to JSON failed." + } + } Write-Verbose -Message "Returned Manifest from YAML file: $($Return.PackageIdentifier)" diff --git a/Tools/PowershellModule/src/Library/New-ARMObjects.ps1 b/Tools/PowershellModule/src/Library/New-ARMObjects.ps1 index 73ff009e..49920bee 100644 --- a/Tools/PowershellModule/src/Library/New-ARMObjects.ps1 +++ b/Tools/PowershellModule/src/Library/New-ARMObjects.ps1 @@ -117,6 +117,9 @@ Function New-ARMObjects ## Sets a sleep of 10 seconds after object creation to allow Azure to update creation status, and mark as "running" Start-Sleep -Seconds 10 } + + ## Sets an additional sleep of 10 seconds, to account for delays in availability + Start-Sleep -Seconds 10 ## Verifies that no error occured when creating the Azure resource if($objerror -or $Result.Error) { @@ -143,6 +146,8 @@ Function New-ARMObjects ## Verifies the presence of the "WinGet.RestSource.Functions.zip" file. Write-Verbose -Message " Confirming Compiled Azure Functions is present" if(Test-Path $RestSourcePath) { + Start-Sleep -Seconds 10 + ## The "WinGet.RestSource.Functions.zip" was found in the working directory Write-Verbose -Message " File Path Found: $RestSourcePath" diff --git a/Tools/PowershellModule/src/Library/New-ARMParameterObject.ps1 b/Tools/PowershellModule/src/Library/New-ARMParameterObject.ps1 index 695bfecf..3d8244e9 100644 --- a/Tools/PowershellModule/src/Library/New-ARMParameterObject.ps1 +++ b/Tools/PowershellModule/src/Library/New-ARMParameterObject.ps1 @@ -49,12 +49,22 @@ Function New-ARMParameterObject $CDBAccountName = $Name $FunctionName = $Name $FrontDoorName = $Name + $appConfigName = $Name + $aspGenevaName = $Name ## The names of the Azure Cosmos Database and Container - Do not change (Must match with the values in the compiled ## Windows Package Manager Functions [WinGet.RestSource.Functions.zip]) $CDBDatabaseName = "WinGet" $CDBContainerName = "Manifests" + ## The values required for Function ARM Template + $manifestCacheEndpoint = "" + $monitoringTenant = "" + $monitoringRole = "" + $monitoringMetricsAccount = "" + + ## The values required for the Azure App Config ARM Template + #$appConfigFeatureFlag = "" ## Relative Path from the Working Directory to the Azure ARM Template Files $TemplateAppInsightsPath = "$TemplateFolderPath\applicationinsights.json" @@ -66,16 +76,18 @@ Function New-ARMParameterObject $TemplateCDBContainerPath = "$TemplateFolderPath\cosmosdb-sql-container.json" $TemplateFunctionPath = "$TemplateFolderPath\azurefunction.json" $TemplateFrontDoorPath = "$TemplateFolderPath\frontdoor.json" + $TemplateAppConfigPath = "$TemplateFolderPath\appconfig.json" - $ParameterAppInsightsPath = "$ParameterFolderPath\applicationinsights$NameEntryIndex.json" - $ParameterKeyVaultPath = "$ParameterFolderPath\keyvault$NameEntryIndex.json" - $ParameterStorageAccountPath = "$ParameterFolderPath\storageaccount$NameEntryIndex.json" - $ParameterASPPath = "$ParameterFolderPath\asp$NameEntryIndex.json" - $ParameterCDBAccountPath = "$ParameterFolderPath\cosmosdb$NameEntryIndex.json" - $ParameterCDBPath = "$ParameterFolderPath\cosmosdb-sql$NameEntryIndex.json" - $ParameterCDBContainerPath = "$ParameterFolderPath\cosmosdb-sql-container$NameEntryIndex.json" - $ParameterFunctionPath = "$ParameterFolderPath\azurefunction$NameEntryIndex.json" - $ParameterFrontDoorPath = "$ParameterFolderPath\frontdoor$NameEntryIndex.json" + $ParameterAppInsightsPath = "$ParameterFolderPath\applicationinsights.json" + $ParameterKeyVaultPath = "$ParameterFolderPath\keyvault.json" + $ParameterStorageAccountPath = "$ParameterFolderPath\storageaccount.json" + $ParameterASPPath = "$ParameterFolderPath\asp.json" + $ParameterCDBAccountPath = "$ParameterFolderPath\cosmosdb.json" + $ParameterCDBPath = "$ParameterFolderPath\cosmosdb-sql.json" + $ParameterCDBContainerPath = "$ParameterFolderPath\cosmosdb-sql-container.json" + $ParameterFunctionPath = "$ParameterFolderPath\azurefunction.json" + $ParameterFrontDoorPath = "$ParameterFolderPath\frontdoor.json" + $ParameterAppConfigPath = "$ParameterFolderPath\appconfig.json" Write-Verbose -Message "ARM Parameter Resource performance is based on the: $ImplementationPerformance." @@ -268,6 +280,21 @@ Function New-ARMParameterObject } } }, + @{ ObjectType = "AppConfig" + ObjectName = $FunctionName + ParameterPath = "$ParameterAppConfigPath" + TemplatePath = "$TemplateAppConfigPath" + Error = "" + Parameters = @{ + '$Schema' = $JSONSchema + contentVersion = $JSONContentVersion + Parameters = @{ + appConfigName = @{ value = $appConfigName } # Name used to contain the Storage Account connection string in the Key Value + location = @{ value = $Region } # Azure hosting location + #featureFlags = @{ value = $appConfigFeatureFlag } # Feature Flag + } + } + }, @{ ObjectType = "StorageAccount" ObjectName = $StorageAccountName ParameterPath = "$ParameterStorageAccountPath" @@ -440,117 +467,22 @@ Function New-ARMParameterObject '$Schema' = $JSONSchema contentVersion = $JSONContentVersion Parameters = @{ - storageSecretName = @{ value = $AzKVStorageSecretName } # Name used to contain the Storage Account connection string in the Key Value - location = @{ value = $Region } # Azure hosting location - cosmosDatabase = @{ value = $CDBDatabaseName } # Cosmos Database Name - cosmosContainer = @{ value = $CDBContainerName } # Cosmos Container Name - serverIdentifier = @{ value = $aspName } # Azure Function Name - functionName = @{ value = $FunctionName } # Azure Function Name - appServiceName = @{ value = $aspName } # Azure App Service Name - keyVaultName = @{ value = $KeyVaultName } # Azure Keyvault Name - appInsightName = @{ value = $AppInsightsName } # Azure App Insights Name + storageSecretName = @{ value = $AzKVStorageSecretName } # Name used to contain the Storage Account connection string in the Key Value + location = @{ value = $Region } # Azure hosting location + cosmosDatabase = @{ value = $CDBDatabaseName } # Cosmos Database Name + cosmosContainer = @{ value = $CDBContainerName } # Cosmos Container Name + serverIdentifier = @{ value = $aspName } # Azure Function Name + functionName = @{ value = $FunctionName } # Azure Function Name + appServiceName = @{ value = $aspName } # Azure App Service Name + keyVaultName = @{ value = $KeyVaultName } # Azure Keyvault Name + appInsightName = @{ value = $AppInsightsName } # Azure App Insights Name + manifestCacheEndpoint = @{ value = $manifestCacheEndpoint } # unknown + monitoringTenant = @{ value = $monitoringTenant } # unknown + monitoringRole = @{ value = $monitoringRole } # unknown + monitoringMetricsAccount = @{ value = $monitoringMetricsAccount } # unknown } } - }#, - # @{ ObjectType = "FrontDoor" ## Requires a CName entry be created for the frontend endpoint. - # ObjectName = $FrontDoorName - # ParameterPath = "$ParameterFrontDoorPath" - # TemplatePath = "$TemplateFrontDoorPath" - # Error = "" - # Parameters = @{ - # '$Schema' = $JSONSchema - # contentVersion = $JSONContentVersion - # Parameters = @{ - # name = @{ value = $FrontDoorName } - # frontendEndpoints = @{ - # value = @( - # @{ - # name = "$($Name + "azurefd")" - # properties = @{ - # hostName = "$($Name + "azurefd").azurefd.net" - # sessionAffinityEnabledState = "Disabled" - # sessionAffinityTtlSeconds = 0 - # resourceState = "Enabled" - # } - # } - # ) - # } - # healthProbeSettings = @{ - # value = @( - # @{ - # name = "healthProbe-fiveSecond" - # properties = @{ - # intervalInSeconds = 5 - # path = "/" - # protocol = "Https" - # resourceState = "Enabled" - # enabledState = "Enabled" - # healthProbeMethod = "Head" - # } - # } - # ) - # } - # loadBalancingSettings = @{ - # value = @( - # @{ - # name = "loadBalancing-tenSample" - # properties = @{ - # additionalLatencyMilliseconds = 1000 - # sampleSize = 10 - # successfulSamplesRequired = 5 - # resourceState = "Enabled" - # } - # } - # ) - # } - # backendPools = @{ - # value = @( - # @{ - # name = "api" - # backEnds = @( - # @{ - # address = "$FunctionName.azurewebsites.net" - # httpPort = 80 - # httpsPort = 443 - # priority = 1 - # weight = 50 - # backendHostHeader = "$FunctionName.azurewebsites.net" - # enabledState = "Enabled" - # } - # ) - # HealthProbeSettingsName = "healthProbe-fiveSecond" - # loadBalancingSettingsName = "loadBalancing-tenSample" - # } - # ) - # } - # routingRules = @{ - # value = @( - # @{ - # name = "api-rule" - # frontendEndpoint = "$($Name + "azurefd")" - # acceptedProtocols = @( "Https" ) - # patternsToMatch = @( "/api/*" ) - # enabledState = "Enabled" - # routeConfiguration = @{ - # odataType = "#Microsoft.Azure.FrontDoor.Models.FrontdoorForwardingConfiguration" - # forwardingProtocol = "HttpsOnly" - # backendPoolName = "api" - # } - # } - # ) - # } - # backendPoolsSettings = @{ - # value = @{ - # enforceCertificateNameCheck = "Enabled" - # sendRecvTimeoutSeconds = 30 - # } - # } - # enabledState = @{ - # value = "Enabled" - # } - # } - # } - # } + } ) ## Uses the newly created ARMObjects[#].Parameters to create new JSON Parameter files. diff --git a/Tools/PowershellModule/src/Library/New-WinGetSource.ps1 b/Tools/PowershellModule/src/Library/New-WinGetSource.ps1 index 48e7673a..4329c0c2 100644 --- a/Tools/PowershellModule/src/Library/New-WinGetSource.ps1 +++ b/Tools/PowershellModule/src/Library/New-WinGetSource.ps1 @@ -92,12 +92,17 @@ Function New-WinGetSource ## Validates that the Azure Modules are installed Write-Verbose -Message "Testing required PowerShell modules are installed." - $RequiredModules = @("Az.Resources", "Az.Accounts", "Az.Websites", "Az.Functions") + $RequiredModules = @("Az.Resources", "Az.Accounts", "Az.Websites", "Az.Functions", "Az.Storage") $Result = Test-PowerShellModuleExist -Modules $RequiredModules if(!$Result) { throw "Unable to run script, missing required PowerShell modules" } + if(!$(Test-Path -Path $RestSourcePath)) + { + throw "REST Source Function Code is missing in specified path ($RestSourcePath)" + } + ############################### ## Create Folders for the Parameter folder paths @@ -136,6 +141,7 @@ Function New-WinGetSource } Write-Error -Message "Testing found an error with the ARM template or parameter files." -TargetObject $ErrReturnObject + Write-Host $Err[0] } @@ -164,6 +170,8 @@ Function New-WinGetSource #### Instructions on how to add the REST source to your Windows Package Manager Client Write-Information -MessageData "Use the following command to register the new REST source with your Windows Package Manager Client:" Write-Information -MessageData " winget source add -n ""restsource"" -a ""https://$AzFunctionURL/api/"" -t ""Microsoft.Rest""" + Write-Verbose -Message "Use the following command to register the new REST source with your Windows Package Manager Client:" + Write-Verbose -Message " winget source add -n ""restsource"" -a ""https://$AzFunctionURL/api/"" -t ""Microsoft.Rest""" #### For more information about how to use the solution, visit the aka.ms link. Write-Information -MessageData "`n For more information on the Windows Package Manager Client, go to: https://aka.ms/winget-command-help`n" diff --git a/Tools/PowershellModule/src/Library/Test-ARMResourceName.ps1 b/Tools/PowershellModule/src/Library/Test-ARMResourceName.ps1 index c355b603..3054efb8 100644 --- a/Tools/PowershellModule/src/Library/Test-ARMResourceName.ps1 +++ b/Tools/PowershellModule/src/Library/Test-ARMResourceName.ps1 @@ -37,7 +37,7 @@ Function Test-ARMResourceName #> PARAM( [Parameter(Position=0, Mandatory=$true, ParameterSetName="Targetted")] - [ValidateSet("AppInsight", "KeyVault", "StorageAccount", "asp", "CosmosDBAccount", "CosmosDBDatabase", "CosmosDBContainer", "Function", "FrontDoor")][String] $ResourceType, + [ValidateSet("AppInsight", "KeyVault", "StorageAccount", "asp", "CosmosDBAccount", "CosmosDBDatabase", "CosmosDBContainer", "Function", "FrontDoor", "AppConfig")][String] $ResourceType, [Parameter(Position=1, Mandatory=$true, ParameterSetName="Targetted")][String] $ResourceName, [Parameter(Position=0, Mandatory=$true, ParameterSetName="SingleObject")] $ARMObject ) @@ -170,11 +170,12 @@ Function Test-ARMResourceName ## Outputs the tests to the screen and their status Write-Information -MessageData $(" Testing the ""$ResourceName"" name meets the requirements:") - Write-Verbose -Message $(" Name within Length:".PadRight($TextPaddingRight, $TextPaddingRightChar) + $NameLengthInRange) - Write-Verbose -Message $(" No Special Chars: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + !$NameContainsSpecialChar) Write-Information -MessageData $("-".PadRight($TextPaddingRight+6, "-")) Write-Information -MessageData $(" Validation Result: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + $Result) Write-Information -MessageData $("") + Write-Verbose -Message $(" Testing the ""$ResourceName"" name meets the requirements:") + Write-Verbose -Message $(" Name within Length:".PadRight($TextPaddingRight, $TextPaddingRightChar) + $NameLengthInRange) + Write-Verbose -Message $(" No Special Chars: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + !$NameContainsSpecialChar) } "FrontDoor" { ## Alphanumerics and hyphens. Start and end with alphanumeric. Length: 5-64 @@ -188,11 +189,14 @@ Function Test-ARMResourceName ## Outputs the tests to the screen and their status Write-Information -MessageData $(" Testing the ""$ResourceName"" name meets the requirements:") + Write-Information -MessageData $(" Validation Result: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + $Result) + Write-Information -MessageData $("") + Write-Verbose -Message $(" Testing the ""$ResourceName"" name meets the requirements:") Write-Verbose -Message $(" Name within Length:".PadRight($TextPaddingRight, $TextPaddingRightChar) + $NameLengthInRange) Write-Verbose -Message $(" No Special Chars: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + !$NameContainsSpecialChar) Write-Verbose -Message $("-".PadRight($TextPaddingRight+6, "-")) - Write-Information -MessageData $(" Validation Result: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + $Result) - Write-Information -MessageData $("") + Write-Verbose -Message $(" Validation Result: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + $Result) + Write-Verbose -Message $("") } Default { $Result = $true @@ -200,6 +204,9 @@ Function Test-ARMResourceName Write-Information -MessageData $(" Testing the ""$ResourceName"" name meets the requirements:") Write-Information -MessageData $(" Validation Result: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + $Result) Write-Information -MessageData $("") + Write-Verbose -Message $(" Testing the ""$ResourceName"" name meets the requirements:") + Write-Verbose -Message $(" Validation Result: ".PadRight($TextPaddingRight, $TextPaddingRightChar) + $Result) + Write-Verbose -Message $("") } } } diff --git a/Tools/PowershellModule/src/Library/Test-ARMTemplate.ps1 b/Tools/PowershellModule/src/Library/Test-ARMTemplate.ps1 index 69ae6764..0b6b6183 100644 --- a/Tools/PowershellModule/src/Library/Test-ARMTemplate.ps1 +++ b/Tools/PowershellModule/src/Library/Test-ARMTemplate.ps1 @@ -32,6 +32,7 @@ Function Test-ARMTemplate BEGIN { Write-Information -MessageData "Verifying the ARM Resource Templates and Parameters are valid:" + Write-Verbose -Message "Verifying the ARM Resource Templates and Parameters are valid:" $Return = @() } PROCESS diff --git a/Tools/PowershellModule/src/Microsoft.WinGet.Source.psd1 b/Tools/PowershellModule/src/Microsoft.WinGet.Source.psd1 index d65c7891..322321d6 100644 --- a/Tools/PowershellModule/src/Microsoft.WinGet.Source.psd1 +++ b/Tools/PowershellModule/src/Microsoft.WinGet.Source.psd1 @@ -3,9 +3,9 @@ # # Module manifest for module 'Microsoft.WinGet.Source' # -# Generated by: denelon +# Generated by: romaclac # -# Generated on: 10/15/2021 +# Generated on: 09/06/2023 # @{ diff --git a/Tools/PowershellModule/src/Microsoft.WinGet.Source.psm1 b/Tools/PowershellModule/src/Microsoft.WinGet.Source.psm1 index 2472156b..c8c063f3 100644 --- a/Tools/PowershellModule/src/Microsoft.WinGet.Source.psm1 +++ b/Tools/PowershellModule/src/Microsoft.WinGet.Source.psm1 @@ -14,6 +14,7 @@ Get-ChildItem -Path "$PSScriptRoot\Library" -Filter *.ps1 | foreach-object { . $ if ($PSEdition -eq $WinGetPSEdition) { try { Add-Type -Path "$PSScriptRoot\Library\WinGet.RestSource.PowershellSupport\Microsoft.Winget.PowershellSupport.dll" + $WinGetDesktopAppInstallerLibLoaded=$true } catch [System.Reflection.ReflectionTypeLoadException] { Write-Host "Message: $($_.Exception.Message)" diff --git a/pipelines/templates/copy-and-publish-powershell.yml b/pipelines/templates/copy-and-publish-powershell.yml index 5c80b3bc..a6566f1a 100644 --- a/pipelines/templates/copy-and-publish-powershell.yml +++ b/pipelines/templates/copy-and-publish-powershell.yml @@ -1,7 +1,7 @@ # Template helper to copy PowerShell scripts and all dependencies parameters: helperLibsPath: '$(Build.SourcesDirectory)\src\WinGet.RestSource.PowershellSupport\bin\$(BuildConfiguration)\netcoreapp3.1' - templatesPath: '$(Build.SourcesDirectory)\src\WinGet.RestSource.Infrastructure\bin\$(BuildConfiguration)' + templatesPath: '$(Build.SourcesDirectory)\src\WinGet.RestSource.Infrastructure\bin\$(BuildConfiguration)\Templates' steps: - task: CopyFiles@2 @@ -25,17 +25,7 @@ steps: - task: CopyFiles@2 displayName: 'Copy Files: Arm Templates' inputs: - Contents: | - ${{ parameters.templatesPath }}\**\applicationinsights.json - ${{ parameters.templatesPath }}\**\asp.json - ${{ parameters.templatesPath }}\**\azurefunction.json - ${{ parameters.templatesPath }}\**\applicationinsights.json - ${{ parameters.templatesPath }}\**\cosmosdb.json - ${{ parameters.templatesPath }}\**\cosmosdb-sql.json - ${{ parameters.templatesPath }}\**\cosmosdb-sql-container.json - ${{ parameters.templatesPath }}\**\frontdoor.json - ${{ parameters.templatesPath }}\**\keyvault.json - ${{ parameters.templatesPath }}\**\storageaccount.json + Contents: ${{ parameters.templatesPath }}\**\*.json TargetFolder: '$(Build.ArtifactStagingDirectory)\Winget.PowerShell.Source\Library\ARMTemplate' OverWrite: true flattenFolders: true diff --git a/src/WinGet.RestSource.Infrastructure/Templates/AppServicePlan/asp.json b/src/WinGet.RestSource.Infrastructure/Templates/AppServicePlan/asp.json new file mode 100644 index 00000000..bd43944c --- /dev/null +++ b/src/WinGet.RestSource.Infrastructure/Templates/AppServicePlan/asp.json @@ -0,0 +1,61 @@ +{ + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", + "contentVersion": "1.0.0.0", + "parameters": { + "aspName": { + "type": "string", + "defaultValue": "[concat('asp', uniquestring(resourceGroup().id))]", + "metadata": { + "description": "App Service Name" + } + }, + "location": { + "type": "string", + "defaultValue": "[resourceGroup().location]", + "metadata": { + "description": "App Service Deployment Location." + } + }, + "skucode": { + "type": "string", + "defaultValue": "P1V2", + "metadata": { + "description": "Sku Code for ASP" + } + }, + "numberOfWorkers": { + "type": "string", + "defaultValue": "1", + "metadata": { + "description": "Number of Workers" + } + } + }, + "variables": {}, + "resources": [ + { + "apiVersion": "2018-02-01", + "name": "[parameters('aspName')]", + "type": "Microsoft.Web/serverfarms", + "location": "[parameters('location')]", + "properties": { + "name": "[parameters('aspName')]", + "numberOfWorkers": "[parameters('numberOfWorkers')]", + "reserved": false + }, + "sku": { + "Name": "[parameters('skuCode')]" + } + } + ], + "outputs": { + "aspName": { + "type": "string", + "value": "[parameters('aspName')]" + }, + "aspResourceId": { + "type": "string", + "value": "[resourceId('Microsoft.Web/serverfarms', parameters('aspName'))]" + } + } +} \ No newline at end of file diff --git a/src/WinGet.RestSource.PowershellSupport/WinGet.RestSource.PowershellSupport.csproj b/src/WinGet.RestSource.PowershellSupport/WinGet.RestSource.PowershellSupport.csproj index 1cb27429..0ad382f0 100644 --- a/src/WinGet.RestSource.PowershellSupport/WinGet.RestSource.PowershellSupport.csproj +++ b/src/WinGet.RestSource.PowershellSupport/WinGet.RestSource.PowershellSupport.csproj @@ -51,6 +51,7 @@ +