Compare commits

..

18 Commits

Author SHA1 Message Date
Andrew f9956c34de Fixed Invoke-DscResource error when a class-based resource module path contains a space 2023-05-13 11:30:57 -07:00
Andrew 727085ecaa Fixed link in v2 changelog 2023-02-27 13:53:37 -08:00
Andrew a935614790 Added v2 changelog 2023-02-27 13:48:07 -08:00
Andrew 7c063aed9d Updated Sbom task parameters 2023-02-24 11:39:47 -08:00
Andrew b83ba2ccc0 Updated EsrpSign parameters 2023-02-24 10:28:36 -08:00
Andrew 316773dfe6 release pipeline - updated machine pool 2023-02-23 20:46:55 -08:00
Andrew 11b3bd0fdb Updated version to v2.0.6 2023-02-23 20:35:27 -08:00
Andrew 4af8841d74 Added SBOM generation and changed image to PSMMS2019-Secure (#69) 2023-02-23 20:32:43 -08:00
Andrew ad361bfe4b Update release pipeline for 1ES (#61) 2023-02-23 20:32:26 -08:00
Andrew 08b5f4de0e Release pipeline updates for 1ES (#63) 2023-02-23 20:31:17 -08:00
Andrew f142525bc7 Updated version to v2.0.6 2023-02-23 20:00:37 -08:00
Andrew a9182cf60e Add ImplementationDetail member only when the member does not already exist 2023-02-23 19:59:36 -08:00
Andrew 68cfed18c9 Remove duplicate result resources from Get-DSCResourcesModules 2023-02-23 19:54:34 -08:00
Steve Lee 3ae4b6afda Change ErrorAction to Ignore so that the error doesn't show up in $Error (#93) 2023-02-23 19:51:42 -08:00
Andrew 4777a3ed77 Remove PSDesiredStateConfiguration.InvokeDscResource experimental feature. (#52) 2023-02-23 19:49:35 -08:00
Andrew 85eeda51a6 Updating CI and Release pipelines with latest Compliance (#43) 2023-02-23 19:40:46 -08:00
bagajjal 70dad1f41e support embedded resource (#38) 2023-02-23 19:37:28 -08:00
Travis Plunk 1cb7076792 Fix CI issues (#40) 2023-02-23 19:36:28 -08:00
6 changed files with 203 additions and 36 deletions
+136 -10
View File
@@ -20,19 +20,145 @@ resources:
stages: stages:
- stage: Build - stage: Build
displayName: Build PSDesiredStateConfiguration module displayName: Build PSDesiredStateConfiguration module
pool:
name: Package ES CodeHub Lab E
jobs: jobs:
- job: BuildPkg - job: BuildPkg
displayName: Build Package displayName: Build Package
pool: variables:
vmImage: windows-latest - group: ESRP
steps: steps:
- template: templates/ci-build.yml - powershell: |
$powerShellPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'powershell'
Invoke-WebRequest -Uri https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1 -outfile ./install-powershell.ps1
./install-powershell.ps1 -Destination $powerShellPath
$vstsCommandString = "vso[task.setvariable variable=PATH]$powerShellPath;$env:PATH"
Write-Host "sending " + $vstsCommandString
Write-Host "##$vstsCommandString"
displayName: Install PowerShell Core
- task: NuGetToolInstaller@1
displayName: 'Install NuGet 5.9.1'
inputs:
checkLatest: false
version: 5.9.1
- pwsh: | - pwsh: |
Write-Verbose "BUILD_OUTPUT_PATH- $env:BUILD_OUTPUT_PATH" -Verbose Get-ChildItem -Path env:
Write-Verbose "SIGNED_OUTPUT_PATH- $env:SIGNED_OUTPUT_PATH" -Verbose displayName: Capture environment for build
Copy-Item $env:BUILD_OUTPUT_PATH $env:SIGNED_OUTPUT_PATH -Recurse -Force condition: succeededOrFailed()
displayName: Build Signing Placeholder
- pwsh: | - pwsh: |
$(Build.SourcesDirectory)/build.ps1 -Publish -Signed $modulePath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'TempModules'
displayName: Publish if (Test-Path -Path $modulePath) {
timeoutInMinutes: 10 Write-Verbose -Verbose "Deleting existing temp module path: $modulePath"
Remove-Item -Path $modulePath -Recurse -Force -ErrorAction Ignore
}
if (! (Test-Path -Path $modulePath)) {
Write-Verbose -Verbose "Creating new temp module path: $modulePath"
$null = New-Item -Path $modulePath -ItemType Directory
}
displayName: Create temporary module path
- pwsh: |
$modulePath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'TempModules'
Write-Verbose -Verbose "Install PowerShellGet V3 to temp module path"
Save-Module -Name PowerShellGet -Path $modulePath -MinimumVersion 3.0.0-beta10 -AllowPrerelease -Force
Write-Verbose -Verbose "Install PlatyPS to temp module path"
Save-Module -Name "platyPS" -Path $modulePath -Force
Write-Verbose -Verbose "Install PSScriptAnalyzer to temp module path"
Save-Module -Name "PSScriptAnalyzer" -Path $modulePath -RequiredVersion 1.18.0 -Force
Write-Verbose -Verbose "Install Pester 4.X to temp module path"
Save-Module -Name "Pester" -MaximumVersion 4.99 -Path $modulePath -Force
Write-Verbose -Verbose "Install PSPackageProject to temp module path"
Save-Module -Name PSPackageProject -Path $modulePath -Force
displayName: Install PSPackageProject and dependencies
- pwsh: |
$modulePath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'TempModules'
$env:PSModulePath = $modulePath + [System.IO.Path]::PathSeparator + $env:PSModulePath
$modPath = Join-Path -Path $modulePath -ChildPath PSPackageProject
Write-Verbose -Verbose "Importing PSPackageProject from: $modPath"
Import-Module -Name $modPath -Force
#
$(Build.SourcesDirectory)/build.ps1 -Build -Clean
displayName: Execute build
- pwsh: |
$signSrcPath = "$(Build.SourcesDirectory)\out\PSDesiredStateConfiguration"
# Set signing src path variable
$vstsCommandString = "vso[task.setvariable variable=signSrcPath]${signSrcPath}"
Write-Host "sending " + $vstsCommandString
Write-Host "##$vstsCommandString"
$signOutPath = "$(Build.SourcesDirectory)\signed\PSDesiredStateConfiguration"
$null = New-Item -ItemType Directory -Path $signOutPath
# Set signing out path variable
$vstsCommandString = "vso[task.setvariable variable=signOutPath]${signOutPath}"
Write-Host "sending " + $vstsCommandString
Write-Host "##$vstsCommandString"
# Set path variable for guardian codesign validation
$vstsCommandString = "vso[task.setvariable variable=GDN_CODESIGN_TARGETDIRECTORY]${signOutPath}"
Write-Host "sending " + $vstsCommandString
Write-Host "##$vstsCommandString"
displayName: Setup variables for signing
- template: EsrpSign.yml@ComplianceRepo
parameters:
# the folder which contains the binaries to sign
buildOutputPath: $(signSrcPath)
# the location to put the signed output
signOutputPath: $(signOutPath)
# the certificate ID to use
certificateId: "CP-230012"
# the file pattern to use, comma separated
pattern: '*.psm1,*.psd1'
- pwsh: |
$repoName = [guid]::newGuid().ToString("N")
$packageRoot = "$(Build.SourcesDirectory)\signed\PSDesiredStateConfiguration"
Register-PSRepository -Name $repoName -SourceLocation $packageRoot -InstallationPolicy Trusted
Publish-Module -Path $packageRoot -Repository $repoName
Unregister-PSRepository -Name $repoName
Get-ChildItem -Recurse -Path $packageRoot | Write-Verbose -Verbose
$nupkgPath = (Get-ChildItem -Recurse -Path $packageRoot -Filter "PSDesiredStateConfiguration*.nupkg" | select -First 1).FullName
Write-Host "##vso[artifact.upload containerfolder=nupkg;artifactname=nupkg]$nupkgPath"
displayName: Package and publish nupkg
name: ProduceNupkg
- publish: "$(signSrcPath)"
artifact: Build
displayName: Publish build
- publish: "$(signOutPath)"
artifact: SignedBuild
displayName: Publish signed build
- stage: Compliance
displayName: Compliance
dependsOn: Build
jobs:
- job: Compliance_Job
pool:
name: Package ES CodeHub Lab E
steps:
- checkout: self
- checkout: ComplianceRepo
- download: current
artifact: SignedBuild
- pwsh: |
Get-ChildItem -Path "$(Pipeline.Workspace)\SignedBuild" -Recurse
displayName: Capture downloaded artifacts
- template: ci-compliance.yml@ComplianceRepo
parameters:
# component-governance
sourceScanPath: '$(Pipeline.Workspace)\SignedBuild'
# credscan
suppressionsFile: ''
# TermCheck
optionsRulesDBPath: ''
optionsFTPath: ''
# tsa-upload
codeBaseName: 'PSDesiredStateConfiguration_20210423'
# selections
APIScan: false # set to false when not using Windows APIs.
+25 -6
View File
@@ -9,11 +9,19 @@ resources:
endpoint: ComplianceGHRepo endpoint: ComplianceGHRepo
name: PowerShell/compliance name: PowerShell/compliance
variables:
- name: PackageName
value: 'PSDesiredStateConfiguration'
- name: PackageVersion
value: '2.0.6'
stages: stages:
- stage: Build - stage: Build
displayName: Build PSDesiredStateConfiguration module displayName: Build PSDesiredStateConfiguration module
pool: pool:
name: Package ES CodeHub Lab E name: PowerShell1ES
demands:
- ImageOverride -equals PSMMS2019-Secure
jobs: jobs:
- job: BuildPkg - job: BuildPkg
displayName: Build Package displayName: Build Package
@@ -23,14 +31,14 @@ stages:
- powershell: | - powershell: |
$powerShellPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'powershell' $powerShellPath = Join-Path -Path $env:AGENT_TEMPDIRECTORY -ChildPath 'powershell'
Invoke-WebRequest -Uri https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1 -outfile ./install-powershell.ps1 Invoke-WebRequest -Uri https://raw.githubusercontent.com/PowerShell/PowerShell/master/tools/install-powershell.ps1 -outfile ./install-powershell.ps1
./install-powershell.ps1 -Destination $powerShellPath ./install-powershell.ps1 -Preview -Destination $powerShellPath
$vstsCommandString = "vso[task.setvariable variable=PATH]$powerShellPath;$env:PATH" $vstsCommandString = "vso[task.setvariable variable=PATH]$powerShellPath;$env:PATH"
Write-Host "sending " + $vstsCommandString Write-Host "sending " + $vstsCommandString
Write-Host "##$vstsCommandString" Write-Host "##$vstsCommandString"
displayName: Install PowerShell Core displayName: Install PowerShell Core
- task: NuGetToolInstaller@1 - task: NuGetToolInstaller@1
displayName: 'Install NuGet 5.9.1' displayName: 'Install NuGet'
inputs: inputs:
checkLatest: false checkLatest: false
version: 5.9.1 version: 5.9.1
@@ -105,6 +113,13 @@ stages:
# the file pattern to use, comma separated # the file pattern to use, comma separated
pattern: '*.psm1,*.psd1' pattern: '*.psm1,*.psd1'
- template: Sbom.yml@ComplianceRepo
parameters:
BuildDropPath: "$(Build.SourcesDirectory)/signed/PSDesiredStateConfiguration"
Build_Repository_Uri: 'https://github.com/PowerShell/PSDesiredStateConfiguration'
PackageName: $(PackageName)
PackageVersion: $(PackageVersion)
- pwsh: | - pwsh: |
$repoName = [guid]::newGuid().ToString("N") $repoName = [guid]::newGuid().ToString("N")
$packageRoot = "$(Build.SourcesDirectory)\signed\PSDesiredStateConfiguration" $packageRoot = "$(Build.SourcesDirectory)\signed\PSDesiredStateConfiguration"
@@ -131,7 +146,9 @@ stages:
jobs: jobs:
- job: Compliance_Job - job: Compliance_Job
pool: pool:
name: Package ES CodeHub Lab E name: PowerShell1ES
demands:
- ImageOverride -equals PSMMS2019-Secure
steps: steps:
- checkout: self - checkout: self
- checkout: ComplianceRepo - checkout: ComplianceRepo
@@ -164,7 +181,9 @@ stages:
- deployment: DeployPowerShellGallery - deployment: DeployPowerShellGallery
displayName: Deploy nupkg to PowerShell Gallery displayName: Deploy nupkg to PowerShell Gallery
pool: pool:
vmImage: windows-latest name: PowerShell1ES
demands:
- ImageOverride -equals PSMMS2019-Secure
environment: 'PSDesiredStateConfiguration-ReleaseApproval' environment: 'PSDesiredStateConfiguration-ReleaseApproval'
strategy: strategy:
runOnce: runOnce:
@@ -173,7 +192,7 @@ stages:
- download: current - download: current
artifact: 'nupkg' artifact: 'nupkg'
- task: NuGetToolInstaller@1 - task: NuGetToolInstaller@1
displayName: 'Install NuGet 5.9.1' displayName: 'Install NuGet'
inputs: inputs:
checkLatest: false checkLatest: false
version: 5.9.1 version: 5.9.1
+3
View File
@@ -0,0 +1,3 @@
# Changelogs
* [v2 changelog](v2.md)
+23
View File
@@ -0,0 +1,23 @@
# v2 Changelog
## [v2.0.7]
### Main changes
- Fixed Invoke-DscResource error when a class-based resource module path contains a space.
[v2.0.7]: https://www.powershellgallery.com/packages/PSDesiredStateConfiguration/2.0.7
## [v2.0.6]
### Main changes
- Fixed `PathSeparator` bug in Get-DSCResourceModules.
- Changed `PSDesiredStateConfiguration.InvokeDscResource` from experimental to permanently enabled feature.
- Changed `ErrorAction` to `Ignore` so that the error doesn't show up in `$Error`.
- Removed duplicate result resources from `Get-DSCResourcesModules`.
- Add `ImplementationDetail` member to results only when the member does not already exist.
- Updated v2 Release pipeline with latest Compliance requirements.
- Added SBOM generation that is now released with v2 module.
[v2.0.6]: https://www.powershellgallery.com/packages/PSDesiredStateConfiguration/2.0.6
@@ -9,7 +9,7 @@
RootModule = 'PSDesiredStateConfiguration.psm1' RootModule = 'PSDesiredStateConfiguration.psm1'
# Version number of this module. # Version number of this module.
moduleVersion = '2.0.5' moduleVersion = '2.0.7'
# Supported PSEditions # Supported PSEditions
CompatiblePSEditions = @('Core') CompatiblePSEditions = @('Core')
@@ -100,13 +100,11 @@ HelpInfoURI = 'https://go.microsoft.com/fwlink/?linkid=2113535'
PrivateData = @{ PrivateData = @{
PSData = @{ PSData = @{
ExperimentalFeatures = @( Tags = @('PSDesiredStateConfiguration',
@{ 'Linux',
Name = 'PSDesiredStateConfiguration.InvokeDscResource' 'Mac',
Description = "Enables the Invoke-DscResource cmdlet and related features." 'Windows')
ProjectUri = 'https://github.com/PowerShell/PSDesiredStateConfiguration'
} }
) }
}
}
} }
@@ -71,7 +71,7 @@ data LocalizedData
Set-StrictMode -Off Set-StrictMode -Off
# In case localized resource is not available we revert back to English as defined in LocalizedData section so ignore the error instead of showing it to user. # In case localized resource is not available we revert back to English as defined in LocalizedData section so ignore the error instead of showing it to user.
Import-LocalizedData -BindingVariable LocalizedData -FileName PSDesiredStateConfiguration.Resource.psd1 -ErrorAction SilentlyContinue Import-LocalizedData -BindingVariable LocalizedData -FileName PSDesiredStateConfiguration.Resource.psd1 -ErrorAction Ignore
Import-Module $PSScriptRoot/helpers/DscResourceInfo.psm1 Import-Module $PSScriptRoot/helpers/DscResourceInfo.psm1
@@ -3679,7 +3679,7 @@ function New-DscChecksum
} }
# If the Force parameter was not specified and the hash file already exists for the current file, log this, and skip this file # If the Force parameter was not specified and the hash file already exists for the current file, log this, and skip this file
if (!$Force -and (Get-Item -Path $fileOutpath -ErrorAction SilentlyContinue)) if (!$Force -and (Get-Item -Path $fileOutpath -ErrorAction Ignore))
{ {
Write-Log -Message ($LocalizedData.CheckSumFileExists -f $fileOutpath) Write-Log -Message ($LocalizedData.CheckSumFileExists -f $fileOutpath)
continue continue
@@ -4047,7 +4047,7 @@ function Get-DscResource
End End
{ {
$Resources = $Resources | Sort-Object -Property Module, Name $Resources = $Resources | Sort-Object -Property Module, Name -Unique
foreach ($resource in $Resources) foreach ($resource in $Resources)
{ {
# return formatted string if required # return formatted string if required
@@ -4140,7 +4140,8 @@ function GetResourceFromKeyword
$schemaToProcess = $classesFromSchema | ForEach-Object -Process { $schemaToProcess = $classesFromSchema | ForEach-Object -Process {
if(($_.CimSystemProperties.ClassName -ieq $keyword.ResourceName) -and ($_.CimSuperClassName -ieq 'OMI_BaseResource')) if(($_.CimSystemProperties.ClassName -ieq $keyword.ResourceName) -and ($_.CimSuperClassName -ieq 'OMI_BaseResource'))
{ {
if ([ExperimentalFeature]::IsEnabled("PSDesiredStateConfiguration.InvokeDscResource")) $member = Get-Member -InputObject $_ -MemberType NoteProperty -Name 'ImplementationDetail'
if ($null -eq $member)
{ {
$_ | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail -PassThru $_ | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail -PassThru
} }
@@ -4210,10 +4211,8 @@ function GetResourceFromKeyword
Ascending = $true Ascending = $true
} }
$resource.UpdateProperties($updatedProperties) $resource.UpdateProperties($updatedProperties)
if ([ExperimentalFeature]::IsEnabled("PSDesiredStateConfiguration.InvokeDscResource"))
{
$resource | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail $resource | Add-Member -MemberType NoteProperty -Name 'ImplementationDetail' -Value $implementationDetail
}
return $resource return $resource
} }
@@ -4647,7 +4646,6 @@ Export-ModuleMember -Function Get-DscResource, Configuration
function Invoke-DscResource function Invoke-DscResource
{ {
[Experimental("PSDesiredStateConfiguration.InvokeDscResource", "Show")]
[CmdletBinding(HelpUri = '')] [CmdletBinding(HelpUri = '')]
param ( param (
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Mandatory)] [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, Mandatory)]
@@ -4751,7 +4749,7 @@ function Invoke-DscClassBasedResource
$iss = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault2() $iss = [System.Management.Automation.Runspaces.InitialSessionState]::CreateDefault2()
$powershell = [PowerShell]::Create($iss) $powershell = [PowerShell]::Create($iss)
$script = @" $script = @"
using module $path using module "$path"
Write-Host -Message ([$type]::new | out-string) Write-Host -Message ([$type]::new | out-string)
return [$type]::new() return [$type]::new()