SA-3610 GHA Migration #43
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: PowerShell SDK CI | |
on: | |
pull_request: | |
branches: | |
- "master" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
jobs: | |
Setup-Build-Dependancies: | |
runs-on: ubuntu-latest | |
timeout-minutes: 10 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup PowerShell Module Cache | |
id: cacher | |
uses: actions/cache@v3 | |
with: | |
path: "/home/runner/.local/share/powershell/Modules/" | |
key: PS-Dependancies | |
- name: Install dependencies | |
if: steps.cacher.outputs.cache-hit != 'true' | |
shell: pwsh | |
env: | |
PESTER_APIKEY: ${{ secrets.PESTER_APIKEY }} | |
PESTER_ORGID: ${{ secrets.PESTER_ORGID }} | |
PESTER_MSP_APIKEY: ${{ secrets.PESTER_MSP_APIKEY }} | |
run: | | |
Set-PSRepository PSGallery -InstallationPolicy Trusted | |
If (!(Get-PackageProvider -Name:('NuGet') -ListAvailable -ErrorAction:('SilentlyContinue'))) { | |
Write-Host ('[status]Installing package provider NuGet'); | |
Install-PackageProvider -Name:('NuGet') -Scope:('CurrentUser') -Force | |
} | |
$PSDependencies = @{ | |
'AWS.Tools.CodeArtifact' = @{Repository = 'PSGallery'; RequiredVersion = '4.1.14.0' } | |
'AWS.Tools.Common' = @{Repository = 'PSGallery'; RequiredVersion = '4.1.14.0' } | |
'BuildHelpers' = @{Repository = 'PSGallery'; RequiredVersion = '2.0.15'} | |
'Pester' = @{Repository = 'PSGallery'; RequiredVersion = '5.3.1'} | |
'powershell-yaml' = @{Repository = 'PSGallery'; RequiredVersion = '0.4.2'} | |
'PowerShellGet' = @{Repository = 'PSGallery'; RequiredVersion = '3.0.12-beta'} | |
'PSScriptAnalyzer' = @{Repository = 'PSGallery'; RequiredVersion = '1.19.1'} | |
} | |
foreach ($RequiredModule in $PSDependencies.Keys) { | |
If ([System.String]::IsNullOrEmpty((Get-InstalledModule | Where-Object { $_.Name -eq $RequiredModule }))) { | |
Write-Host("[status]Installing module: '$RequiredModule'; version: $($PSDependencies[$RequiredModule].RequiredVersion) from $($PSDependencies[$RequiredModule].Repository)") | |
Install-Module -Name $RequiredModule -Repository:($($PSDependencies[$RequiredModule].Repository)) -RequiredVersion:($($PSDependencies[$RequiredModule].RequiredVersion)) -AllowPrerelease -Force | |
} | |
} | |
Build-SDK: | |
needs: ["Setup-Build-Dependancies"] | |
runs-on: ubuntu-latest | |
timeout-minutes: 70 | |
strategy: | |
fail-fast: false | |
matrix: | |
SDKName: ['JumpCloud.SDK.DirectoryInsights', 'JumpCloud.SDK.V1', 'JumpCloud.SDK.V2'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v3 | |
with: | |
path: "/home/runner/.local/share/powershell/Modules/" | |
key: PS-Dependancies | |
- name: Build ${{ matrix.SDKName }} | |
shell: pwsh | |
run: | | |
./BuildAutoRest -SDKName:("${{ matrix.SDKName }}") | |
# zip contents for artifact | |
Compress-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/${{ matrix.SDKName }} -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/${{ matrix.SDKName }}.zip -CompressionLevel Optimal -Force | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: build-${{ matrix.SDKName }} | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/${{ matrix.SDKName }}.zip | |
retention-days: 1 | |
Test-SDK: | |
needs: ["Setup-Build-Dependancies", "Build-SDK", "Invoke-Pester"] | |
runs-on: ubuntu-latest | |
timeout-minutes: 70 | |
strategy: | |
fail-fast: false | |
matrix: | |
SDKName: ['JumpCloud.SDK.DirectoryInsights', 'JumpCloud.SDK.V1', 'JumpCloud.SDK.V2'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v3 | |
with: | |
path: "/home/runner/.local/share/powershell/Modules/" | |
key: PS-Dependancies | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-${{ matrix.SDKName }} | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
- name: Unzip ${{ matrix.SDKName }} module | |
shell: pwsh | |
run: | | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/${{ matrix.SDKName }}.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-JumpCloud.SDK.V1 | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
if: matrix.SDKName == 'JumpCloud.SDK.V2' | |
- name: Unzip V1 module for V2 Tests | |
shell: pwsh | |
run: | | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/JumpCloud.SDK.V1.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
if: matrix.SDKName == 'JumpCloud.SDK.V2' | |
- name: Test ${{ matrix.SDKName }} | |
shell: pwsh | |
env: | |
PESTER_APIKEY: ${{ secrets.PESTER_APIKEY }} | |
PESTER_ORGID: ${{ secrets.PESTER_ORGID }} | |
PESTER_MSP_APIKEY: ${{ secrets.PESTER_MSP_APIKEY }} | |
PESTER_PROVIDERID: ${{ secrets.PESTER_PROVIDERID }} | |
run: | | |
$ErrorActionnPreference = 'Stop' | |
./Test-Module.ps1 -JCApiKey:($env:PESTER_APIKEY) -JCOrgId:($env:PESTER_ORGID) -JCApiKeyMTP:($env:PESTER_MSP_APIKEY) -JCProviderId:($env:PESTER_PROVIDERID) -ExcludeTagList:("MTP") -IncludeTagList:("*") -testModulePath:("./SDKs/PowerShell/${{ matrix.SDKName }}/test-module.ps1") | |
Test-SDK-MTP: | |
needs: ["Setup-Build-Dependancies", "Build-SDK", "Invoke-Pester"] | |
runs-on: ubuntu-latest | |
timeout-minutes: 70 | |
strategy: | |
fail-fast: false | |
matrix: | |
SDKName: ['JumpCloud.SDK.V1', 'JumpCloud.SDK.V2'] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: actions/cache@v3 | |
with: | |
path: "/home/runner/.local/share/powershell/Modules/" | |
key: PS-Dependancies | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-${{ matrix.SDKName }} | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
- name: Unzip ${{ matrix.SDKName }} module | |
shell: pwsh | |
run: | | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/${{ matrix.SDKName }}.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-JumpCloud.SDK.V1 | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
if: matrix.SDKName == 'JumpCloud.SDK.V2' | |
- name: Unzip V1 module for V2 Tests | |
shell: pwsh | |
run: | | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/JumpCloud.SDK.V1.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
if: matrix.SDKName == 'JumpCloud.SDK.V2' | |
- name: Test MTP ${{ matrix.SDKName }} | |
shell: pwsh | |
env: | |
PESTER_APIKEY: ${{ secrets.PESTER_APIKEY }} | |
PESTER_ORGID: ${{ secrets.PESTER_ORGID }} | |
PESTER_MSP_APIKEY: ${{ secrets.PESTER_MSP_APIKEY }} | |
PESTER_PROVIDERID: ${{ secrets.PESTER_PROVIDERID }} | |
run: | | |
$ErrorActionnPreference = 'Stop' | |
./Test-Module.ps1 -JCApiKey:($env:PESTER_APIKEY) -JCOrgId:($env:PESTER_ORGID) -JCApiKeyMTP:($env:PESTER_MSP_APIKEY) -JCProviderId:($env:PESTER_PROVIDERID) -ExcludeTagList:("None") -IncludeTagList:("MTP") -testModulePath:("./SDKs/PowerShell/${{ matrix.SDKName }}/test-module.ps1") | |
Invoke-Pester: | |
needs: ["Setup-Build-Dependancies", "Build-SDK"] | |
runs-on: ubuntu-latest | |
timeout-minutes: 70 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Checkout Support Repo | |
uses: actions/checkout@v4 | |
with: | |
repository: TheJumpCloud/support | |
path: './support' | |
- uses: actions/cache@v3 | |
with: | |
path: "/home/runner/.local/share/powershell/Modules/" | |
key: PS-Dependancies | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-JumpCloud.SDK.DirectoryInsights | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-JumpCloud.SDK.V1 | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
- uses: actions/download-artifact@v3 | |
with: | |
name: build-JumpCloud.SDK.V2 | |
path: /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ | |
- name: Unzip artifacts | |
shell: pwsh | |
run: | | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/JumpCloud.SDK.DirectoryInsights.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/JumpCloud.SDK.V1.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
Expand-Archive -Path /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/JumpCloud.SDK.V2.zip -DestinationPath /home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/ -Force | |
- name: Invoke Pester | |
shell: pwsh | |
env: | |
PESTER_APIKEY: ${{ secrets.PESTER_APIKEY }} | |
PESTER_ORGID: ${{ secrets.PESTER_ORGID }} | |
PESTER_MSP_APIKEY: ${{ secrets.PESTER_MSP_APIKEY }} | |
PESTER_PROVIDERID: ${{ secrets.PESTER_PROVIDERID }} | |
run: | | |
# Import all the SDKs | |
# $sdks = @('JumpCloud.SDK.DirectoryInsights', 'JumpCloud.SDK.V1', 'JumpCloud.SDK.V2') | |
foreach ($sdk in $sdks){ | |
Import-Module "/home/runner/work/jcapi-powershell/jcapi-powershell/SDKs/PowerShell/$sdk/$sdk.psd1" -force | |
} | |
# print tree path | |
tree | |
$ErrorActionPreference = 'stop' | |
# . /home/runner/work/support/support/PowerShell/Deploy/SdkSync/jcapiToSupportSync.ps1 -RequiredModulesRepo CodeArtifact | |
# Get functions where 'jcsdk' functions are found | |
# Private & Public Functions | |
$pathList = @('Private', 'Public') | |
# Get matching functions | |
$functions = $pathList | ForEach-Object { | |
Get-ChildItem "/home/runner/work/jcapi-powershell/jcapi-powershell/support/PowerShell/Jumpcloud Module/$($_)/*.ps1" -Recurse | |
} | |
$testTags = @() | |
# For each function file | |
foreach ($file in $functions) { | |
$regex = [regex]'jcsdk' | |
if (Select-String -path $file.FullName -Pattern $regex){ | |
# If 'jcsdk' is used in the function file continue | |
# get test file | |
$testFile = ($file.FullName -replace "\\Jumpcloud Module\\", "\\Jumpcloud Module\\Tests\\") -replace ".ps1", ".Tests.ps1" | |
$tagRegex = [regex]'-Tag:\(.(\w+).\)' | |
$testTag = Select-String -path $testFile -Pattern $tagRegex | |
# "$test" | |
if ($testTag.matches) { | |
# If tag found in test file add to testTags list: | |
$testTags += $testTag.matches.Groups[1].Value | |
} | |
} | |
} | |
# return found tags | |
$tags = ($testTags | Select-Object -Unique) | |
# Manually add tags that we can't automatically add with script above: | |
# At this time only associations need to be added: | |
$tags += 'JCAssociation' | |
# Invoke Pester | |
. "/home/runner/work/jcapi-powershell/jcapi-powershell/support/PowerShell/JumpCloud Module/Tests/InvokePester.ps1" -JumpCloudApiKey $env:PESTER_APIKEY -ExcludeTagList:('MSP') -IncludeTagList:($tags) -RequiredModulesRepo:('PSGallery') | |