mirror of
https://github.com/microsoft/PowerToys.git
synced 2025-12-15 19:27:56 +01:00
Add DSC v3 resource discovery support in PowerToys with subfolder structure and PATH configuration (#43253)
<!-- Enter a brief description/summary of your PR here. What does it fix/what does it change/how was it tested (even manually, if necessary)? --> ## Summary of the Pull Request - Use DSCModules subfolder for JSON manifest files - Use relative path "..\PowerToys.DSC.exe" in JSON manifests - Configure PATH environment variable to point to DSCModules subfolder <!-- Please review the items on the PR checklist before submitting--> ## PR Checklist - [ ] Closes: #xxx - [ ] **Communication:** I've discussed this with core contributors already. If the work hasn't been agreed, this work might be rejected - [ ] **Tests:** Added/updated and all pass - [ ] **Localization:** All end-user-facing strings can be localized - [ ] **Dev docs:** Added/updated - [ ] **New binaries:** Added on the required places - [ ] [JSON for signing](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ESRPSigning_core.json) for new binaries - [ ] [WXS for installer](https://github.com/microsoft/PowerToys/blob/main/installer/PowerToysSetup/Product.wxs) for new binaries and localization folder - [ ] [YML for CI pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/ci/templates/build-powertoys-steps.yml) for new test projects - [ ] [YML for signed pipeline](https://github.com/microsoft/PowerToys/blob/main/.pipelines/release.yml) - [ ] **Documentation updated:** If checked, please file a pull request on [our docs repo](https://github.com/MicrosoftDocs/windows-uwp/tree/docs/hub/powertoys) and link it here: #xxx <!-- Provide a more detailed description of the PR, other things fixed, or any additional comments/features here --> ## Detailed Description of the Pull Request / Additional comments <!-- Describe how you validated the behavior. Add automated tests wherever possible, but list manual validation steps taken as well --> ## Validation Steps Performed
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -349,10 +349,7 @@ src/common/Telemetry/*.etl
|
|||||||
/src/modules/powerrename/ui/RCb24464
|
/src/modules/powerrename/ui/RCb24464
|
||||||
|
|
||||||
# Generated installer file for Monaco source files.
|
# Generated installer file for Monaco source files.
|
||||||
/installer/PowerToysSetup/MonacoSRC.wxs
|
|
||||||
/installer/PowerToysSetup/DscResources.wxs
|
|
||||||
/installer/PowerToysSetupVNext/MonacoSRC.wxs
|
/installer/PowerToysSetupVNext/MonacoSRC.wxs
|
||||||
/installer/PowerToysSetupVNext/DscResources.wxs
|
|
||||||
|
|
||||||
# MSBuildCache
|
# MSBuildCache
|
||||||
/MSBuildCacheLogs/
|
/MSBuildCacheLogs/
|
||||||
|
|||||||
@@ -65,21 +65,28 @@ if (-not (Test-Path $outputDir)) {
|
|||||||
New-Item -Path $outputDir -ItemType Directory -Force | Out-Null
|
New-Item -Path $outputDir -ItemType Directory -Force | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "DSC manifests will be generated to: '$outputDir'"
|
# DSC v3 manifests go to DSCModules subfolder
|
||||||
|
$dscOutputDir = Join-Path $outputDir 'DSCModules'
|
||||||
|
if (-not (Test-Path $dscOutputDir)) {
|
||||||
|
Write-Host "Creating DSCModules subfolder at '$dscOutputDir'."
|
||||||
|
New-Item -Path $dscOutputDir -ItemType Directory -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Cleaning previously generated DSC manifest files from '$outputDir'."
|
Write-Host "DSC manifests will be generated to: '$dscOutputDir'"
|
||||||
Get-ChildItem -Path $outputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
|
||||||
|
|
||||||
$arguments = @('manifest', '--resource', 'settings', '--outputDir', $outputDir)
|
Write-Host "Cleaning previously generated DSC manifest files from '$dscOutputDir'."
|
||||||
|
Get-ChildItem -Path $dscOutputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
||||||
|
|
||||||
|
$arguments = @('manifest', '--resource', 'settings', '--outputDir', $dscOutputDir)
|
||||||
Write-Host "Invoking DSC manifest generator: '$exePath' $($arguments -join ' ')"
|
Write-Host "Invoking DSC manifest generator: '$exePath' $($arguments -join ' ')"
|
||||||
& $exePath @arguments
|
& $exePath @arguments
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
throw "PowerToys.DSC.exe exited with code $LASTEXITCODE"
|
throw "PowerToys.DSC.exe exited with code $LASTEXITCODE"
|
||||||
}
|
}
|
||||||
|
|
||||||
$generatedFiles = Get-ChildItem -Path $outputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction Stop
|
$generatedFiles = Get-ChildItem -Path $dscOutputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction Stop
|
||||||
if ($generatedFiles.Count -eq 0) {
|
if ($generatedFiles.Count -eq 0) {
|
||||||
throw "No DSC manifest files were generated in '$outputDir'."
|
throw "No DSC manifest files were generated in '$dscOutputDir'."
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Generated $($generatedFiles.Count) DSC manifest file(s):"
|
Write-Host "Generated $($generatedFiles.Count) DSC manifest file(s):"
|
||||||
|
|||||||
@@ -54,6 +54,7 @@
|
|||||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\CmdPal.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\CmdPal.wxs.bk""""
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\CmdPal.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\CmdPal.wxs.bk""""
|
||||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\ColorPicker.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\ColorPicker.wxs.bk""""
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\ColorPicker.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\ColorPicker.wxs.bk""""
|
||||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\Core.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\Core.wxs.bk""""
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\Core.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\Core.wxs.bk""""
|
||||||
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\DscResources.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\DscResources.wxs.bk""""
|
||||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\EnvironmentVariables.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\EnvironmentVariables.wxs.bk""""
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\EnvironmentVariables.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\EnvironmentVariables.wxs.bk""""
|
||||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\FileExplorerPreview.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\FileExplorerPreview.wxs.bk""""
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\FileExplorerPreview.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\FileExplorerPreview.wxs.bk""""
|
||||||
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\FileLocksmith.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\FileLocksmith.wxs.bk""""
|
call cmd /C "copy ""$(ProjectDir)..\PowerToysSetupVNext\FileLocksmith.wxs"" ""$(ProjectDir)..\PowerToysSetupVNext\FileLocksmith.wxs.bk""""
|
||||||
|
|||||||
@@ -9,6 +9,25 @@
|
|||||||
<RegistryValue Type="string" Name="InstallScope" Value="$(var.InstallScope)" />
|
<RegistryValue Type="string" Name="InstallScope" Value="$(var.InstallScope)" />
|
||||||
</RegistryKey>
|
</RegistryKey>
|
||||||
</Component>
|
</Component>
|
||||||
|
<?if $(var.PerUser) = "true" ?>
|
||||||
|
<Component Id="powertoys_env_path_user" Bitness="always64">
|
||||||
|
<!-- Anchor registry for component key path -->
|
||||||
|
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
|
||||||
|
<RegistryValue Type="string" Name="powertoys_env_path_user" Value="" KeyPath="yes" />
|
||||||
|
</RegistryKey>
|
||||||
|
<!-- Append DSCModules folder to current user's PATH for DSC v3 usage -->
|
||||||
|
<Environment Id="AddPowerToysToUserPath" Name="PATH" Action="set" Part="last" System="no" Value="[DSCModulesReferenceFolder]" />
|
||||||
|
</Component>
|
||||||
|
<?else?>
|
||||||
|
<Component Id="powertoys_env_path_machine" Bitness="always64">
|
||||||
|
<!-- Anchor registry for component key path -->
|
||||||
|
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
|
||||||
|
<RegistryValue Type="string" Name="powertoys_env_path_machine" Value="" KeyPath="yes" />
|
||||||
|
</RegistryKey>
|
||||||
|
<!-- Append DSCModules folder to machine PATH for DSC v3 usage -->
|
||||||
|
<Environment Id="AddPowerToysToMachinePath" Name="PATH" Action="set" Part="last" System="yes" Value="[DSCModulesReferenceFolder]" />
|
||||||
|
</Component>
|
||||||
|
<?endif?>
|
||||||
<Component Id="powertoys_toast_clsid" Bitness="always64">
|
<Component Id="powertoys_toast_clsid" Bitness="always64">
|
||||||
<RemoveFolder Id="Remove_powertoys_toast_clsid" On="uninstall" />
|
<RemoveFolder Id="Remove_powertoys_toast_clsid" On="uninstall" />
|
||||||
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\CLSID\{DD5CACDA-7C2E-4997-A62A-04A597B58F76}">
|
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\CLSID\{DD5CACDA-7C2E-4997-A62A-04A597B58F76}">
|
||||||
@@ -44,16 +63,6 @@
|
|||||||
</Component>
|
</Component>
|
||||||
</DirectoryRef>
|
</DirectoryRef>
|
||||||
|
|
||||||
<DirectoryRef Id="DSCModulesReferenceFolder">
|
|
||||||
<Component Id="PowerToysDSCReference" Guid="40869ACB-0BEB-4911-AE41-5E73BC1586A9" Bitness="always64">
|
|
||||||
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
|
|
||||||
<RegistryValue Type="string" Name="DSCModulesReference" Value="" KeyPath="yes" />
|
|
||||||
</RegistryKey>
|
|
||||||
<File Source="$(var.RepoDir)\src\dsc\Microsoft.PowerToys.Configure\Generated\Microsoft.PowerToys.Configure\$(var.Version).0\Microsoft.PowerToys.Configure.psd1" Id="PTConfReference.psd1" />
|
|
||||||
<File Source="$(var.RepoDir)\src\dsc\Microsoft.PowerToys.Configure\Generated\Microsoft.PowerToys.Configure\$(var.Version).0\Microsoft.PowerToys.Configure.psm1" Id="PTConfReference.psm1" />
|
|
||||||
</Component>
|
|
||||||
</DirectoryRef>
|
|
||||||
|
|
||||||
<?if $(var.PerUser) = "true" ?>
|
<?if $(var.PerUser) = "true" ?>
|
||||||
<!-- DSC module files for PerUser handled in InstallDSCModule custom action. -->
|
<!-- DSC module files for PerUser handled in InstallDSCModule custom action. -->
|
||||||
<?else?>
|
<?else?>
|
||||||
@@ -101,7 +110,6 @@
|
|||||||
<RegistryValue Type="string" Name="RemoveCoreFolder" Value="" KeyPath="yes" />
|
<RegistryValue Type="string" Name="RemoveCoreFolder" Value="" KeyPath="yes" />
|
||||||
</RegistryKey>
|
</RegistryKey>
|
||||||
<RemoveFolder Id="RemoveBaseApplicationsAssetsFolder" Directory="BaseApplicationsAssetsFolder" On="uninstall" />
|
<RemoveFolder Id="RemoveBaseApplicationsAssetsFolder" Directory="BaseApplicationsAssetsFolder" On="uninstall" />
|
||||||
<RemoveFolder Id="RemoveDSCModulesReferenceFolder" Directory="DSCModulesReferenceFolder" On="uninstall" />
|
|
||||||
<RemoveFolder Id="RemoveWinUI3AppsInstallFolder" Directory="WinUI3AppsInstallFolder" On="uninstall" />
|
<RemoveFolder Id="RemoveWinUI3AppsInstallFolder" Directory="WinUI3AppsInstallFolder" On="uninstall" />
|
||||||
<RemoveFolder Id="RemoveWinUI3AppsAssetsFolder" Directory="WinUI3AppsAssetsFolder" On="uninstall" />
|
<RemoveFolder Id="RemoveWinUI3AppsAssetsFolder" Directory="WinUI3AppsAssetsFolder" On="uninstall" />
|
||||||
<RemoveFolder Id="RemoveINSTALLFOLDER" Directory="INSTALLFOLDER" On="uninstall" />
|
<RemoveFolder Id="RemoveINSTALLFOLDER" Directory="INSTALLFOLDER" On="uninstall" />
|
||||||
@@ -113,7 +121,11 @@
|
|||||||
<ComponentRef Id="License_rtf" />
|
<ComponentRef Id="License_rtf" />
|
||||||
<ComponentRef Id="Notice_md" />
|
<ComponentRef Id="Notice_md" />
|
||||||
<ComponentRef Id="DesktopShortcut" />
|
<ComponentRef Id="DesktopShortcut" />
|
||||||
<ComponentRef Id="PowerToysDSCReference" />
|
<?if $(var.PerUser) = "true" ?>
|
||||||
|
<ComponentRef Id="powertoys_env_path_user" />
|
||||||
|
<?else?>
|
||||||
|
<ComponentRef Id="powertoys_env_path_machine" />
|
||||||
|
<?endif?>
|
||||||
<?if $(var.PerUser) = "false" ?>
|
<?if $(var.PerUser) = "false" ?>
|
||||||
<ComponentRef Id="PowerToysDSC" />
|
<ComponentRef Id="PowerToysDSC" />
|
||||||
<?endif?>
|
<?endif?>
|
||||||
|
|||||||
33
installer/PowerToysSetupVNext/DscResources.wxs
Normal file
33
installer/PowerToysSetupVNext/DscResources.wxs
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||||
|
|
||||||
|
<?include $(sys.CURRENTDIR)\Common.wxi?>
|
||||||
|
|
||||||
|
<?define DscJsonFiles=?>
|
||||||
|
<?define DscJsonFilesPath=$(var.BinDir)\DSCModules?>
|
||||||
|
|
||||||
|
<Fragment>
|
||||||
|
<DirectoryRef Id="DSCModulesReferenceFolder" FileSource="$(var.DscJsonFilesPath)">
|
||||||
|
<!-- DSC v2 PowerShell module files -->
|
||||||
|
<Component Id="PowerToysDSCReference" Guid="40869ACB-0BEB-4911-AE41-5E73BC1586A9" Bitness="always64">
|
||||||
|
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
|
||||||
|
<RegistryValue Type="string" Name="DSCModulesReference" Value="" KeyPath="yes" />
|
||||||
|
</RegistryKey>
|
||||||
|
<File Source="$(var.RepoDir)\src\dsc\Microsoft.PowerToys.Configure\Generated\Microsoft.PowerToys.Configure\$(var.Version).0\Microsoft.PowerToys.Configure.psd1" Id="PTConfReference.psd1" />
|
||||||
|
<File Source="$(var.RepoDir)\src\dsc\Microsoft.PowerToys.Configure\Generated\Microsoft.PowerToys.Configure\$(var.Version).0\Microsoft.PowerToys.Configure.psm1" Id="PTConfReference.psm1" />
|
||||||
|
</Component>
|
||||||
|
|
||||||
|
<!-- DSC v3 JSON manifest files - Generated by generateAllFileComponents.ps1 -->
|
||||||
|
<!--DscJsonFiles_Component_Def-->
|
||||||
|
</DirectoryRef>
|
||||||
|
|
||||||
|
<ComponentGroup Id="DscResourcesComponentGroup">
|
||||||
|
<ComponentRef Id="PowerToysDSCReference" />
|
||||||
|
<Component Id="RemoveDSCModulesFolder" Guid="A3C77D92-4E97-4C1A-9F2E-8B3C5D6E7F80" Directory="DSCModulesReferenceFolder">
|
||||||
|
<RegistryKey Root="$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
|
||||||
|
<RegistryValue Type="string" Name="RemoveDSCModulesFolder" Value="" KeyPath="yes" />
|
||||||
|
</RegistryKey>
|
||||||
|
<RemoveFolder Id="RemoveDSCModulesReferenceFolder" Directory="DSCModulesReferenceFolder" On="uninstall" />
|
||||||
|
</Component>
|
||||||
|
</ComponentGroup>
|
||||||
|
</Fragment>
|
||||||
|
</Wix>
|
||||||
@@ -14,7 +14,6 @@ SET PTRoot=$(SolutionDir)\..
|
|||||||
call "..\..\..\publish.cmd" x64
|
call "..\..\..\publish.cmd" x64
|
||||||
)
|
)
|
||||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuildThisFileDirectory)\generateMonacoWxs.ps1 -monacoWxsFile "$(MSBuildThisFileDirectory)\MonacoSRC.wxs" -Platform "$(Platform)" -nugetHeatPath "$(NUGET_PACKAGES)\wixtoolset.heat\5.0.2"
|
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuildThisFileDirectory)\generateMonacoWxs.ps1 -monacoWxsFile "$(MSBuildThisFileDirectory)\MonacoSRC.wxs" -Platform "$(Platform)" -nugetHeatPath "$(NUGET_PACKAGES)\wixtoolset.heat\5.0.2"
|
||||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuildThisFileDirectory)\generateDscResourcesWxs.ps1 -dscWxsFile "$(MSBuildThisFileDirectory)\DscResources.wxs" -Platform "$(Platform)" -Configuration "$(Configuration)"
|
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition="'$(Platform)' != 'x64'">
|
<PropertyGroup Condition="'$(Platform)' != 'x64'">
|
||||||
@@ -25,7 +24,6 @@ SET PTRoot=$(SolutionDir)\..
|
|||||||
call "..\..\..\publish.cmd" arm64
|
call "..\..\..\publish.cmd" arm64
|
||||||
)
|
)
|
||||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuildThisFileDirectory)\generateMonacoWxs.ps1 -monacoWxsFile "$(MSBuildThisFileDirectory)\MonacoSRC.wxs" -Platform "$(Platform)" -nugetHeatPath "$(NUGET_PACKAGES)\wixtoolset.heat\5.0.2"
|
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuildThisFileDirectory)\generateMonacoWxs.ps1 -monacoWxsFile "$(MSBuildThisFileDirectory)\MonacoSRC.wxs" -Platform "$(Platform)" -nugetHeatPath "$(NUGET_PACKAGES)\wixtoolset.heat\5.0.2"
|
||||||
call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuildThisFileDirectory)\generateDscResourcesWxs.ps1 -dscWxsFile "$(MSBuildThisFileDirectory)\DscResources.wxs" -Platform "$(Platform)" -Configuration "$(Configuration)"
|
|
||||||
</PreBuildEvent>
|
</PreBuildEvent>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
@@ -37,6 +35,7 @@ call powershell.exe -NonInteractive -executionpolicy Unrestricted -File $(MSBuil
|
|||||||
call move /Y ..\..\..\CmdPal.wxs.bk ..\..\..\CmdPal.wxs
|
call move /Y ..\..\..\CmdPal.wxs.bk ..\..\..\CmdPal.wxs
|
||||||
call move /Y ..\..\..\ColorPicker.wxs.bk ..\..\..\ColorPicker.wxs
|
call move /Y ..\..\..\ColorPicker.wxs.bk ..\..\..\ColorPicker.wxs
|
||||||
call move /Y ..\..\..\Core.wxs.bk ..\..\..\Core.wxs
|
call move /Y ..\..\..\Core.wxs.bk ..\..\..\Core.wxs
|
||||||
|
call move /Y ..\..\..\DscResources.wxs.bk ..\..\..\DscResources.wxs
|
||||||
call move /Y ..\..\..\EnvironmentVariables.wxs.bk ..\..\..\EnvironmentVariables.wxs
|
call move /Y ..\..\..\EnvironmentVariables.wxs.bk ..\..\..\EnvironmentVariables.wxs
|
||||||
call move /Y ..\..\..\FileExplorerPreview.wxs.bk ..\..\..\FileExplorerPreview.wxs
|
call move /Y ..\..\..\FileExplorerPreview.wxs.bk ..\..\..\FileExplorerPreview.wxs
|
||||||
call move /Y ..\..\..\FileLocksmith.wxs.bk ..\..\..\FileLocksmith.wxs
|
call move /Y ..\..\..\FileLocksmith.wxs.bk ..\..\..\FileLocksmith.wxs
|
||||||
|
|||||||
@@ -317,3 +317,7 @@ Generate-FileComponents -fileListName "SettingsV2IconsModelsFiles" -wxsFilePath
|
|||||||
#Workspaces
|
#Workspaces
|
||||||
Generate-FileList -fileDepsJson "" -fileListName WorkspacesImagesComponentFiles -wxsFilePath $PSScriptRoot\Workspaces.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\Assets\Workspaces\"
|
Generate-FileList -fileDepsJson "" -fileListName WorkspacesImagesComponentFiles -wxsFilePath $PSScriptRoot\Workspaces.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\Assets\Workspaces\"
|
||||||
Generate-FileComponents -fileListName "WorkspacesImagesComponentFiles" -wxsFilePath $PSScriptRoot\Workspaces.wxs
|
Generate-FileComponents -fileListName "WorkspacesImagesComponentFiles" -wxsFilePath $PSScriptRoot\Workspaces.wxs
|
||||||
|
|
||||||
|
#DSC Resources - JSON manifest files in DSCModules subfolder
|
||||||
|
Generate-FileList -fileDepsJson "" -fileListName DscJsonFiles -wxsFilePath $PSScriptRoot\DscResources.wxs -depsPath "$PSScriptRoot..\..\..\$platform\Release\DSCModules\"
|
||||||
|
Generate-FileComponents -fileListName "DscJsonFiles" -wxsFilePath $PSScriptRoot\DscResources.wxs
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
[CmdletBinding()]
|
|
||||||
Param(
|
|
||||||
[Parameter(Mandatory = $True)]
|
|
||||||
[string]$dscWxsFile,
|
|
||||||
[Parameter(Mandatory = $True)]
|
|
||||||
[string]$Platform,
|
|
||||||
[Parameter(Mandatory = $True)]
|
|
||||||
[string]$Configuration
|
|
||||||
)
|
|
||||||
|
|
||||||
$ErrorActionPreference = 'Stop'
|
|
||||||
|
|
||||||
$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
||||||
|
|
||||||
# Find build output directory
|
|
||||||
$buildOutputDir = Join-Path $scriptDir "..\..\$Platform\$Configuration"
|
|
||||||
|
|
||||||
if (-not (Test-Path $buildOutputDir)) {
|
|
||||||
Write-Error "Build output directory not found: '$buildOutputDir'"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
# Find all DSC manifest JSON files
|
|
||||||
$dscFiles = Get-ChildItem -Path $buildOutputDir -Filter "microsoft.powertoys.*.settings.dsc.resource.json" -File
|
|
||||||
|
|
||||||
if (-not $dscFiles) {
|
|
||||||
Write-Warning "No DSC manifest files found in '$buildOutputDir'"
|
|
||||||
# Create empty component group
|
|
||||||
$wxsContent = @"
|
|
||||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
|
||||||
|
|
||||||
<?include `$(sys.CURRENTDIR)\Common.wxi?>
|
|
||||||
|
|
||||||
<Fragment>
|
|
||||||
<ComponentGroup Id="DscResourcesComponentGroup">
|
|
||||||
</ComponentGroup>
|
|
||||||
</Fragment>
|
|
||||||
</Wix>
|
|
||||||
"@
|
|
||||||
Set-Content -Path $dscWxsFile -Value $wxsContent
|
|
||||||
exit 0
|
|
||||||
}
|
|
||||||
|
|
||||||
Write-Host "Found $($dscFiles.Count) DSC manifest file(s)"
|
|
||||||
|
|
||||||
# Generate WiX fragment
|
|
||||||
$wxsContent = @"
|
|
||||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
|
||||||
|
|
||||||
<?include `$(sys.CURRENTDIR)\Common.wxi?>
|
|
||||||
|
|
||||||
<Fragment>
|
|
||||||
<DirectoryRef Id="DSCModulesReferenceFolder">
|
|
||||||
"@
|
|
||||||
|
|
||||||
$componentRefs = @()
|
|
||||||
|
|
||||||
foreach ($file in $dscFiles) {
|
|
||||||
$componentId = "DscResource_" + ($file.BaseName -replace '[^A-Za-z0-9_]', '_')
|
|
||||||
$fileId = $componentId + "_File"
|
|
||||||
$guid = [System.Guid]::NewGuid().ToString().ToUpper()
|
|
||||||
|
|
||||||
$componentRefs += $componentId
|
|
||||||
|
|
||||||
$wxsContent += @"
|
|
||||||
|
|
||||||
<Component Id="$componentId" Guid="{$guid}" Directory="DSCModulesReferenceFolder">
|
|
||||||
<RegistryKey Root="`$(var.RegistryScope)" Key="Software\Classes\powertoys\components">
|
|
||||||
<RegistryValue Type="string" Name="$componentId" Value="" KeyPath="yes"/>
|
|
||||||
</RegistryKey>
|
|
||||||
<File Id="$fileId" Source="`$(var.BinDir)$($file.Name)" Vital="no"/>
|
|
||||||
</Component>
|
|
||||||
"@
|
|
||||||
}
|
|
||||||
|
|
||||||
$wxsContent += @"
|
|
||||||
|
|
||||||
</DirectoryRef>
|
|
||||||
</Fragment>
|
|
||||||
|
|
||||||
<Fragment>
|
|
||||||
<ComponentGroup Id="DscResourcesComponentGroup">
|
|
||||||
"@
|
|
||||||
|
|
||||||
foreach ($componentId in $componentRefs) {
|
|
||||||
$wxsContent += @"
|
|
||||||
|
|
||||||
<ComponentRef Id="$componentId"/>
|
|
||||||
"@
|
|
||||||
}
|
|
||||||
|
|
||||||
$wxsContent += @"
|
|
||||||
|
|
||||||
</ComponentGroup>
|
|
||||||
</Fragment>
|
|
||||||
</Wix>
|
|
||||||
"@
|
|
||||||
|
|
||||||
# Write the WiX file
|
|
||||||
Set-Content -Path $dscWxsFile -Value $wxsContent
|
|
||||||
|
|
||||||
Write-Host "Generated DSC resources WiX fragment: '$dscWxsFile'"
|
|
||||||
@@ -13,7 +13,7 @@ namespace PowerToys.DSC.Models;
|
|||||||
public sealed class DscManifest
|
public sealed class DscManifest
|
||||||
{
|
{
|
||||||
private const string Schema = "https://aka.ms/dsc/schemas/v3/bundled/resource/manifest.vscode.json";
|
private const string Schema = "https://aka.ms/dsc/schemas/v3/bundled/resource/manifest.vscode.json";
|
||||||
private const string Executable = @"PowerToys.DSC.exe";
|
private const string Executable = @"..\PowerToys.DSC.exe";
|
||||||
|
|
||||||
private readonly string _type;
|
private readonly string _type;
|
||||||
private readonly string _version;
|
private readonly string _version;
|
||||||
|
|||||||
@@ -40,9 +40,11 @@
|
|||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<!-- In debug mode, generate the DSC resource JSON files -->
|
<!-- Generate the DSC resource JSON files to DSCModules subfolder -->
|
||||||
<Target Name="GenerateDscResourceJsonFiles" AfterTargets="Build" Condition="'$(Configuration)' == 'Debug'">
|
<!-- Skip generation in CI/CD builds (CIBuild=true) to avoid unnecessary work during pipeline -->
|
||||||
<Message Text="Generating DSC resource JSON files inside ..." Importance="high" />
|
<Target Name="GenerateDscResourceJsonFiles" AfterTargets="Build" Condition="'$(CIBuild)' != 'true'">
|
||||||
<Exec Command="dotnet "$(TargetPath)" manifest --resource settings --outputDir "$(TargetDir)\"" />
|
<Message Text="Generating DSC resource JSON files to DSCModules subfolder..." Importance="high" />
|
||||||
|
<MakeDir Directories="$(TargetDir)DSCModules" />
|
||||||
|
<Exec Command="dotnet "$(TargetPath)" manifest --resource settings --outputDir "$(TargetDir)DSCModules"" />
|
||||||
</Target>
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -93,21 +93,28 @@ if (-not (Test-Path $outputDir)) {
|
|||||||
New-Item -Path $outputDir -ItemType Directory -Force | Out-Null
|
New-Item -Path $outputDir -ItemType Directory -Force | Out-Null
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "DSC manifests will be generated to: '$outputDir'"
|
# DSC v3 manifests go to DSCModules subfolder
|
||||||
|
$dscOutputDir = Join-Path $outputDir 'DSCModules'
|
||||||
|
if (-not (Test-Path $dscOutputDir)) {
|
||||||
|
Write-Host "Creating DSCModules subfolder at '$dscOutputDir'."
|
||||||
|
New-Item -Path $dscOutputDir -ItemType Directory -Force | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
Write-Host "Cleaning previously generated DSC manifest files from '$outputDir'."
|
Write-Host "DSC manifests will be generated to: '$dscOutputDir'"
|
||||||
Get-ChildItem -Path $outputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
|
||||||
|
|
||||||
$arguments = @('manifest', '--resource', 'settings', '--outputDir', $outputDir)
|
Write-Host "Cleaning previously generated DSC manifest files from '$dscOutputDir'."
|
||||||
|
Get-ChildItem -Path $dscOutputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction SilentlyContinue | Remove-Item -Force
|
||||||
|
|
||||||
|
$arguments = @('manifest', '--resource', 'settings', '--outputDir', $dscOutputDir)
|
||||||
Write-Host "Invoking DSC manifest generator: '$exePath' $($arguments -join ' ')"
|
Write-Host "Invoking DSC manifest generator: '$exePath' $($arguments -join ' ')"
|
||||||
& $exePath @arguments
|
& $exePath @arguments
|
||||||
if ($LASTEXITCODE -ne 0) {
|
if ($LASTEXITCODE -ne 0) {
|
||||||
throw "PowerToys.DSC.exe exited with code $LASTEXITCODE"
|
throw "PowerToys.DSC.exe exited with code $LASTEXITCODE"
|
||||||
}
|
}
|
||||||
|
|
||||||
$generatedFiles = Get-ChildItem -Path $outputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction Stop
|
$generatedFiles = Get-ChildItem -Path $dscOutputDir -Filter 'microsoft.powertoys.*.settings.dsc.resource.json' -ErrorAction Stop
|
||||||
if ($generatedFiles.Count -eq 0) {
|
if ($generatedFiles.Count -eq 0) {
|
||||||
throw "No DSC manifest files were generated in '$outputDir'."
|
throw "No DSC manifest files were generated in '$dscOutputDir'."
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "Generated $($generatedFiles.Count) DSC manifest file(s):"
|
Write-Host "Generated $($generatedFiles.Count) DSC manifest file(s):"
|
||||||
|
|||||||
Reference in New Issue
Block a user