Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
97 changes: 25 additions & 72 deletions .github/actions/build-sdk/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -17,77 +17,28 @@ runs:
- name: Set up Node
uses: actions/setup-node@v6
with:
node-version: "24"
node-version: "20"

- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'

- name: Download OpenAPI Generator
shell: bash
run: |
wget -q https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar -O openapi-generator-cli.jar

- name: Run Prescript
shell: bash
run: node sdk-resources/prescript.js ${{ inputs.api-specs-path }}/idn

- name: Build V3 SDK
shell: bash
run: |
rm -rf ./PSSailpoint/v3
java -jar openapi-generator-cli.jar generate \
-i ${{ inputs.api-specs-path }}/idn/sailpoint-api.v3.yaml \
-g powershell -o PSSailpoint/v3 \
--global-property skipFormModel=false,apiDocs=true,modelDocs=true \
--config sdk-resources/v3-config.yaml
node sdk-resources/postscript.js ./PSSailpoint/v3

- name: Build Beta SDK
shell: bash
run: |
rm -rf ./PSSailpoint/beta
java -jar openapi-generator-cli.jar generate \
-i ${{ inputs.api-specs-path }}/idn/sailpoint-api.beta.yaml \
-g powershell -o PSSailpoint/beta \
--global-property skipFormModel=false,apiDocs=true,modelDocs=true \
--config sdk-resources/beta-config.yaml
node sdk-resources/postscript.js ./PSSailpoint/beta

- name: Build V2024 SDK
- name: Install Node dependencies
shell: bash
run: |
rm -rf ./PSSailpoint/v2024
java -jar openapi-generator-cli.jar generate \
-i ${{ inputs.api-specs-path }}/idn/sailpoint-api.v2024.yaml \
-g powershell -o PSSailpoint/v2024 \
--global-property skipFormModel=false,apiDocs=true,modelDocs=true \
--config sdk-resources/v2024-config.yaml
node sdk-resources/postscript.js ./PSSailpoint/v2024
run: npm install

- name: Build V2025 SDK
- name: Download OpenAPI Generator
shell: bash
run: |
rm -rf ./PSSailpoint/v2025
java -jar openapi-generator-cli.jar generate \
-i ${{ inputs.api-specs-path }}/idn/sailpoint-api.v2025.yaml \
-g powershell -o PSSailpoint/v2025 \
--global-property skipFormModel=false,apiDocs=true,modelDocs=true \
--config sdk-resources/v2025-config.yaml
node sdk-resources/postscript.js ./PSSailpoint/v2025
wget -q https://repo1.maven.org/maven2/org/openapitools/openapi-generator-cli/7.12.0/openapi-generator-cli-7.12.0.jar -O openapi-generator-cli.jar

- name: Build V2026 SDK
- name: Build Versioned SDK (per-partition)
shell: bash
run: |
rm -rf ./PSSailpoint/v2026
java -jar openapi-generator-cli.jar generate \
-i ${{ inputs.api-specs-path }}/idn/sailpoint-api.v2026.yaml \
-g powershell -o PSSailpoint/v2026 \
--global-property skipFormModel=false,apiDocs=true,modelDocs=true \
--config sdk-resources/v2026-config.yaml
node sdk-resources/postscript.js ./PSSailpoint/v2026
node sdk-resources/build-versioned-sdk.js \
${{ inputs.api-specs-path }}/idn/apis

- name: Build NERM SDK
shell: bash
Expand Down Expand Up @@ -115,28 +66,30 @@ runs:
shell: pwsh
run: |
$DebugPreference = "Continue"
./PSSailpoint/Build.ps1
./PSSailpoint/v3/Build.ps1
./PSSailpoint/beta/Build.ps1
./PSSailpoint/v2024/Build.ps1
./PSSailpoint/v2025/Build.ps1
./PSSailpoint/v2026/Build.ps1
# Build per-partition modules (dynamically discovered)
Get-ChildItem -Path './PSSailpoint' -Directory |
Where-Object { $_.Name -match '^[a-z].+_v\d{1,2}$' } |
ForEach-Object {
$buildScript = Join-Path $_.FullName 'Build.ps1'
if (Test-Path $buildScript) { & $buildScript }
}
# Build NERM modules
./PSSailpoint/nerm/Build.ps1
./PSSailpoint/nermV2025/Build.ps1
# Build root barrel module manifest
./PSSailpoint/Build.ps1

- name: Import Modules and Run Tests
shell: pwsh
run: |
$DebugPreference = "Continue"
Import-Module -Name '.\PSSailpoint\v3\src\PSSailpoint.V3' -Verbose
Import-Module -Name '.\PSSailpoint\beta\src\PSSailpoint.Beta' -Verbose
Import-Module -Name '.\PSSailpoint\v2024\src\PSSailpoint.V2024' -Verbose
Import-Module -Name '.\PSSailpoint\v2025\src\PSSailpoint.V2025' -Verbose
Import-Module -Name '.\PSSailpoint\v2026\src\PSSailpoint.V2026' -Verbose
Import-Module -Name '.\PSSailpoint\nerm\src\PSSailpoint.NERM' -Verbose
Import-Module -Name '.\PSSailpoint\nermV2025\src\PSSailpoint.NERMV2025' -Verbose
. .\PSSailpoint\Configuration.ps1
. .\PSSailpoint\Pagination.ps1
# Import all partition modules via the barrel module
Import-Module -Name './PSSailpoint/PSSailpoint' -Verbose
# Import NERM modules (not included in the partition barrel)
Import-Module -Name './PSSailpoint/nerm/src/PSSailpoint.NERM' -Verbose
Import-Module -Name './PSSailpoint/nermV2025/src/PSSailpoint.NERMV2025' -Verbose
. ./PSSailpoint/Configuration.ps1
. ./PSSailpoint/Pagination.ps1
if ("${{ inputs.skip-tests }}" -ne "true") {
Install-Module -Name Pester -Force
Invoke-Pester -Output Detailed ./PSSailpoint/tests/
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/build_pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ env:
SAIL_CLIENT_ID: ${{ secrets.SDK_TEST_TENANT_CLIENT_ID }}
SAIL_CLIENT_SECRET: ${{ secrets.SDK_TEST_TENANT_CLIENT_SECRET }}
SAIL_BASE_URL: ${{ secrets.SDK_TEST_TENANT_BASE_URL }}
SAIL_NERM_BASE_URL: ${{ secrets.SDK_TEST_NERM_BASE_URL }}

on:
pull_request:
Expand Down
35 changes: 11 additions & 24 deletions .github/workflows/push_sdk_docs_to_dev_portal.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -41,30 +41,17 @@ jobs:

- name: Sync files between folders
run: |
# v3
rsync -cav --delete powershell-sdk/PSSailpoint/v3/docs/Methods developer-community/docs/tools/sdk/powershell/Reference/V3
rsync -cav --delete powershell-sdk/PSSailpoint/v3/docs/Models developer-community/docs/tools/sdk/powershell/Reference/V3
rsync -av powershell-sdk/PSSailpoint/v3/docs/Examples/powershell_code_examples_overlay.yaml developer-community/static/code-examples/v3/

# beta
rsync -cav --delete powershell-sdk/PSSailpoint/beta/docs/Methods developer-community/docs/tools/sdk/powershell/Reference/Beta
rsync -cav --delete powershell-sdk/PSSailpoint/beta/docs/Models developer-community/docs/tools/sdk/powershell/Reference/Beta
rsync -av powershell-sdk/PSSailpoint/beta/docs/Examples/powershell_code_examples_overlay.yaml developer-community/static/code-examples/beta/

# v2024
rsync -cav --delete powershell-sdk/PSSailpoint/v2024/docs/Methods developer-community/docs/tools/sdk/powershell/Reference/V2024
rsync -cav --delete powershell-sdk/PSSailpoint/v2024/docs/Models developer-community/docs/tools/sdk/powershell/Reference/V2024
rsync -av powershell-sdk/PSSailpoint/v2024/docs/Examples/powershell_code_examples_overlay.yaml developer-community/static/code-examples/v2024/

# v2025
rsync -cav --delete powershell-sdk/PSSailpoint/v2025/docs/Methods developer-community/docs/tools/sdk/powershell/Reference/V2025
rsync -cav --delete powershell-sdk/PSSailpoint/v2025/docs/Models developer-community/docs/tools/sdk/powershell/Reference/V2025
rsync -av powershell-sdk/PSSailpoint/v2025/docs/Examples/powershell_code_examples_overlay.yaml developer-community/static/code-examples/v2025/

# v2026
rsync -cav --delete powershell-sdk/PSSailpoint/v2026/docs/Methods developer-community/docs/tools/sdk/powershell/Reference/V2026
rsync -cav --delete powershell-sdk/PSSailpoint/v2026/docs/Models developer-community/docs/tools/sdk/powershell/Reference/V2026
rsync -av powershell-sdk/PSSailpoint/v2026/docs/Examples/powershell_code_examples_overlay.yaml developer-community/static/code-examples/v2026/
# Per-partition modules (dynamically discovered — new partitions sync automatically)
for partition_dir in powershell-sdk/PSSailpoint/*_v[0-9]*; do
[ -d "$partition_dir" ] || continue
resource=$(basename "$partition_dir")
rsync -cav --delete "$partition_dir/docs/Methods" "developer-community/docs/tools/sdk/powershell/Reference/$resource"
rsync -cav --delete "$partition_dir/docs/Models" "developer-community/docs/tools/sdk/powershell/Reference/$resource"
if [ -f "$partition_dir/docs/Examples/powershell_code_examples_overlay.yaml" ]; then
rsync -av "$partition_dir/docs/Examples/powershell_code_examples_overlay.yaml" \
"developer-community/static/code-examples/$resource/"
fi
done

- name: Check for changes and commit if any
working-directory: developer-community
Expand Down
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ test.ps1
config.json
loadModule.ps1
build.sh
openapi-generator-cli.jar
openapi-generator-cli.jar
.sdk-build-tmp/
build-errors/
node_modules/
67 changes: 4 additions & 63 deletions PSSailpoint/Build.ps1
Original file line number Diff line number Diff line change
@@ -1,83 +1,24 @@
#
# IdentityNow V3 API
# Use these APIs to interact with the IdentityNow platform to achieve repeatable, automated processes with greater scalability. We encourage you to join the SailPoint Developer Community forum at https://developer.sailpoint.com/discuss to connect with other developers using our APIs.
# Version: 3.0.0
# Generated by OpenAPI Generator: https://openapi-generator.tech
#

function Get-FunctionsToExport {
[CmdletBinding()]
Param (
[Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
[ValidateNotNullOrEmpty()]
[Alias('FullName')]
$Path
)

Process {
$Token = $null
$ParserErr = $null

$Ast = [System.Management.Automation.Language.Parser]::ParseFile(
$Path,
[ref]$Token,
[ref]$ParserErr
)

if ($ParserErr) {
throw $ParserErr
}
else {
foreach ($name in 'Begin', 'Process', 'End') {
foreach ($Statement in $Ast."${name}Block".Statements) {
if (
[String]::IsNullOrWhiteSpace($Statement.Name) -or
$Statement.Extent.ToString() -notmatch
('function\W+{0}' -f $Statement.Name)
) {
continue
}

$Statement.Name
}
}
}
}
}

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$FunctionPath = "$PSScriptRoot" | ForEach-Object { $_ }

$Manifest = @{
Path = "$ScriptDir\PSSailpoint.psd1"
Path = (Join-Path $ScriptDir 'PSSailpoint.psd1')

Author = 'Sailpoint Developer Relations'
CompanyName = 'SailPoint Technologies'
Description = 'PSSailpoint - the PowerShell module for IdentityNow'

ModuleVersion = '1.7.100'
ModuleVersion = '1.0.0'

RootModule = 'PSSailpoint.psm1'
Guid = '7A197170-97E8-4DCD-A171-271D4AEC2F36' # Has to be static, otherwise each new build will be considered different module
Guid = '7A197170-97E8-4DCD-A171-271D4AEC2F36' # Must stay static

PowerShellVersion = '6.2'

FunctionsToExport = $FunctionPath | Get-ChildItem -Filter *.ps1 | Get-FunctionsToExport

RequiredModules = @(
@{ModuleName = 'PSSailpoint.Beta'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V3'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V2024'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V2025'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V2026'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.Nerm'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.NERMV2025'; RequiredVersion = '1.7.100'; }
)
FunctionsToExport = '*'

VariablesToExport = @()
AliasesToExport = @()
CmdletsToExport = @()

}

New-ModuleManifest @Manifest
2 changes: 1 addition & 1 deletion PSSailpoint/Configuration.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -321,7 +321,7 @@ function Get-EnvConfig {
$Configuration["ClientSecret"] = $ENV:SAIL_CLIENT_SECRET
}

if ($null -ne $ENV:SAIL_NERM_BASE_URL) {
if (![string]::IsNullOrEmpty($ENV:SAIL_NERM_BASE_URL)) {
$Configuration["NermBaseUrl"] = $ENV:SAIL_NERM_BASE_URL
}

Expand Down
17 changes: 4 additions & 13 deletions PSSailpoint/PSSailpoint.psd1
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
#
# Generated by: Sailpoint Developer Relations
#
# Generated on: 06/25/2026
# Generated on: 6/25/2026
#

@{
Expand All @@ -12,7 +12,7 @@
RootModule = 'PSSailpoint.psm1'

# Version number of this module.
ModuleVersion = '1.7.100'
ModuleVersion = '1.0.0'

# Supported PSEditions
# CompatiblePSEditions = @()
Expand Down Expand Up @@ -51,13 +51,7 @@ PowerShellVersion = '6.2'
# ProcessorArchitecture = ''

# Modules that must be imported into the global environment prior to importing this module
RequiredModules = @(@{ModuleName = 'PSSailpoint.Beta'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V3'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V2024'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V2025'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.V2026'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.Nerm'; RequiredVersion = '1.7.100'; },
@{ModuleName = 'PSSailpoint.NERMV2025'; RequiredVersion = '1.7.100'; })
# RequiredModules = @()

# Assemblies that must be loaded prior to importing this module
# RequiredAssemblies = @()
Expand All @@ -75,10 +69,7 @@ RequiredModules = @(@{ModuleName = 'PSSailpoint.Beta'; RequiredVersion = '1.7.10
# NestedModules = @()

# Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
FunctionsToExport = 'Get-FunctionsToExport', 'Get-DefaultConfiguration',
'Set-DefaultConfiguration', 'Get-IDNAccessToken', 'Get-EnvConfig',
'Get-LocalConfig', 'Get-Config', 'Invoke-Paginate',
'Invoke-PaginateSearch'
FunctionsToExport = '*'

# Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
CmdletsToExport = @()
Expand Down
Loading
Loading