Skip to content

SA-3610 GHA Migration #33

SA-3610 GHA Migration

SA-3610 GHA Migration #33

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"]
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"]
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", "Test-SDK"]
runs-on: ubuntu-latest
timeout-minutes: 70
steps:
- name: Checkout Support Repo
uses: actions/checkout@v4
with:
repository: TheJumpCloud/support
path: './support'
- 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-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: |
$ErrorActionPreference = 'stop'
./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 "./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
. "./support/PowerShell/JumpCloud Module/Tests/InvokePester.ps1" -JumpCloudApiKey $env:PESTER_APIKEY -JumpCloudApiKeyMsp $env:PESTER_MSP_APIKEY -ExcludeTagList:('None') -IncludeTagList:($tags) -RequiredModulesRepo:('CodeArtifact')