DSCResources/CircleNode/CircleNode.schema.psm1
Configuration CircleNode { param ( # Parameterhelp description [Parameter(Mandatory)] [String] $Version, [System.Boolean] $DefaultVersion ) Import-DscResource -Module CircleCIDSC Import-DscResource -Module cChoco CircleChoco choco { } cChocoPackageInstaller nvm-portable { Name = 'nvm.portable' Version = '1.1.7' DependsOn = '[CircleChoco]choco' } Script InstallNode { GetScript = { $matches = $null $(nvm list) | Where-Object { $_ -match '\d+\.\d+\.\d+' } if ($matches) { $nvmVersions = $matches } else { $nvmVersions = @() } $(nvm list) | Where-Object { $_ -match '\* \d+\.\d+\.\d+' } if ( $matches ) { $selectedVersion = $matches[0] } else { $selectedVersion = @() } return @{ Result = @{ Versions = $nvmVersions; Selected = $selectedVersion } } } TestScript = { $state = [scriptblock]::Create($GetScript).Invoke() if ($state.Result.Versions -And $state.Result.Versions.Contains($using:Version)) { Write-Verbose -Message ('Version {0} present in {1}' -f $using:Version, $state.Result) if ($using:DefaultVersion) { if ($state.Result.Selected -eq $using:Version) { return $true Write-Verbose -Message ('Version {0} selected' -f $state.Selected) } else { Write-Verbose -Message ('Version {0} selected expected {1}' -f $state.Result, $using:Version) return $false } } else { return $true } } else { Write-Verbose -Message ('Version {0} missing in {1}' -f $using:Version, $state.Result) return $false } } SetScript = { $(nvm install $using:Version) if ($using:DefaultVersion) { Write-Verbose "setting $using:Version as Default version" $(nvm use $using:Version) $(nvm on) $(npm install -g yarn) } } DependsOn = '[cChocoPackageInstaller]nvm-portable' } } |