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
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,50 @@ All notable changes to this project will be documented in this file.

The format is based on `Keep a Changelog <http://keepachangelog.com/>`__.

3.89.0 - 2026-06-30
-------------------
Added
~~~~~
* Data Science service

* Support for configurable randomization windows for schedules

* ``oci data-science schedule create --trigger-initial-jitter-in-minutes``
* ``oci data-science schedule update --trigger-initial-jitter-in-minutes``

* Object Storage Service

* Support for KMS Bucket Key in Object Storage

* ``oci os bucket create --is-bucket-key-enabled``
* ``oci os bucket update --is-bucket-key-enabled``
* ``oci os bucket reencrypt --is-reencrypt-bucket-key-only``

* PGSQL Control Plane service

* Support for Point-in-Time Recovery (PITR) in PostgreSQL database systems

* ``oci psql db-system create-db-system-point-in-time-db-system-source-details``
* ``oci psql pitr-details get``
* ``oci psql backup-collection list-backups --backup-source-type``
* ``oci psql db-system restore --time-to-restore``

* Resource Manager service

* Support for Bitbucket Cloud email/API token configuration source providers

* ``oci resource-manager configuration-source-provider create-configuration-source-provider-create-bitbucket-cloud-email-api-token-configuration-source-provider-details --api-endpoint --email --secret-id``
* ``oci resource-manager configuration-source-provider update-configuration-source-provider-update-bitbucket-cloud-email-api-token-configuration-source-provider-details --api-endpoint --email --secret-id``

Changed
~~~~~~~
* Resource Manager service

* [BREAKING] Removal of deprecated Bitbucket Cloud username/app-password configuration source provider commands

* ``oci resource-manager configuration-source-provider create-configuration-source-provider-create-bitbucket-cloud-username-app-password-configuration-source-provider-details``
* ``oci resource-manager configuration-source-provider update-configuration-source-provider-update-bitbucket-cloud-username-app-password-configuration-source-provider-details``

3.88.0 - 2026-06-23
-------------------
Added
Expand Down
2 changes: 1 addition & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Jinja2>=3.1.5,<4.0.0; python_version >= '3.7'
jmespath>=0.10.0,<=1.0.1
ndg-httpsclient==0.4.2
mock==2.0.0
oci==2.180.0
oci==2.181.0
packaging>=22.0,<25.0; python_version > '3.8'
packaging==20.2; python_version <= '3.8'
pluggy==0.13.0
Expand Down
113 changes: 57 additions & 56 deletions scripts/install/install.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ function VersionMeetsMinimumRequirements($Version, $MinVersion) {
$VersionArray = @($Version.split('.'))
$MinVersionArray = @($MinVersion.split('.'))

For ($i=0; $i -le $VersionArray.Length; $i++) {
For ($i=0; $i -lt $VersionArray.Length; $i++) {
# if we have reached the end of the MinVersion and we still have digits on the system version then the version is sufficient
if ($i -ge $MinVersionArray.Length) {
return $true
Expand Down Expand Up @@ -124,60 +124,70 @@ function VerifyPythonExecutableMeetsMinimumRequirements {
return $false
}

# need to escape spaces in the path for Invoke-Expression
$EscapedExecutable = $PythonExecutable
$PythonVersion = Invoke-Expression "& `"$EscapedExecutable`" -c 'import platform;print(platform.python_version())'"
$MinVersionToCheck = $MinValidPython3Version
Try {
$PythonVersion = & $PythonExecutable -c 'import platform;print(platform.python_version())'
if ($LastExitCode -ne 0) {
throw "Python version check failed with exit code $LastExitCode"
}
} Catch {
LogOutput "Ignoring Python registry entry because the Python executable could not be run: $PythonExecutable. Uninstall or repair this Python installation manually. If re-installing, please check that you install a python version above $MinVersionToCheck"
return $false
}

if (VersionMeetsMinimumRequirements $PythonVersion $MinVersionToCheck) {
# If there is a valid python and it is not python 3
if ( (-Not $AcceptAllDefaults) -And $PythonVersion.StartsWith("2") -And ($MinVersionToCheck -ne $MinValidPython3Version)){
$message = 'OCI-CLI requires python 3. Do you want to install Python 3?'
$question = 'Install Python 3 now? (Entering "n" will install OCI CLI using existing Python)'

$choices = New-Object Collections.ObjectModel.Collection[Management.Automation.Host.ChoiceDescription]
$choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&Yes'))
$choices.Add((New-Object Management.Automation.Host.ChoiceDescription -ArgumentList '&No'))

$decision = $Host.UI.PromptForChoice($message, $question, $choices, 0)
if ($decision -eq 0) {
LogOutput 'Upgrading Python to Python 3...'
return $false
}
}
return $true
}

LogOutput "$PythonExecutable Python version $PythonVersion is below minimum required version $MinVersionToCheck"
return $false
}

# Finds the most recent version of Python installed in the registry and returns
# the path for python.exe for that install (or $null if no install exists).
# Documentation on the registry structure: https://www.python.org/dev/peps/pep-0514/
function FindLatestPythonExecutableInRegistry {
# Finds the most recent usable version of Python installed in the registry and returns
# the path for python.exe for that install, or $null if no usable install exists.
# Documentation on the registry structure: https://www.python.org/dev/peps/pep-0514/
function FindLatestUsablePythonExecutableInRegistry {
Param(
[Parameter(Mandatory=$true)]
[string]$RootRegistryLocation
)

$PythonExecutable = $null
$PythonCoreRegistryLocation = "${RootRegistryLocation}:\Software\Python\PythonCore"
if (Test-Path $PythonCoreRegistryLocation) {
LogOutput "Python found in registry: $PythonCoreRegistryLocation"
$PythonInstallations = (Get-ChildItem -recurse $PythonCoreRegistryLocation) | Sort-Object -Descending
if ($PythonInstallations) {
ForEach ($Installation in $PythonInstallations) {
# we are sorting by descending so this will grab the greatest installed version of python
If ($installation.Name.EndsWith("\InstallPath")) {
$PythonInstallLocation = (Get-ItemProperty -LiteralPath $Installation.PSPath).'(default)'
return Join-Path $PythonInstallLocation "python.exe"
}
}
}
}

return $PythonExecutable
LogOutput "Python found in registry: $PythonCoreRegistryLocation"
$PythonInstallations = (Get-ChildItem -recurse $PythonCoreRegistryLocation) | Sort-Object -Descending
if ($PythonInstallations) {
ForEach ($PythonInstallation in $PythonInstallations) {
$Installation = $PythonInstallation
Try {
$InstallPathProperties = Get-ItemProperty -LiteralPath $Installation.PSPath -ErrorAction Stop
} Catch {
LogOutput "Ignoring Python registry entry because it could not be read: $($Installation.Name). Error: $($_.Exception.Message)"
Continue
}

$PythonInstallLocation = $InstallPathProperties.'(default)'
if (-Not $PythonInstallLocation) {
LogOutput "Ignoring Python registry entry with missing InstallPath default value: $($Installation.Name)"
Continue
}
$PythonExecutable = $InstallPathProperties.ExecutablePath
if (-Not $PythonExecutable) {
$PythonExecutable = Join-Path $PythonInstallLocation "python.exe"
}
if (-Not (Test-Path -LiteralPath $PythonExecutable -PathType Leaf)) {
LogOutput "Ignoring stale Python registry entry. Executable does not exist: $PythonExecutable. Uninstall or repair this Python installation manually."
Continue
}
# Runtime validation of the executable is done by checking if the minimum requirements from the
# python executable is satisfied.
if (VerifyPythonExecutableMeetsMinimumRequirements -PythonExecutable $PythonExecutable) {
return $PythonExecutable
}
}
}
}
return $null
}

function DownloadFile($Uri, $OutFile) {
Expand Down Expand Up @@ -307,24 +317,15 @@ Try {

# check if Python is installed, and is greater than MinValidPythonVersion
$PythonExecutable = $null
$CurrentUserPythonExecutable = FindLatestPythonExecutableInRegistry "HKCU"
$LocalMachinePythonExecutable = FindLatestPythonExecutableInRegistry "HKLM"

# if python is installed in the registry but the corresponding python.exe doesn't exist
# then the user will need to repair or uninstall python and re-run the script
$PythonInstallationCorruptErrorMessage = "Error: Python executable referenced in registry does not exist. Uninstall or repair your Python installation manually and then re-run this script."
$CurrentUserPythonInstallationExeMissing = $LocalMachinePythonExecutable -And (-Not (Test-Path $LocalMachinePythonExecutable))
$LocalMachinePythonInstallationExeMissing = $CurrentUserPythonExecutable -And (-Not (Test-Path $CurrentUserPythonExecutable))
If ($CurrentUserPythonInstallationExeMissing -Or $LocalMachinePythonInstallationExeMissing) {
Write-Error $PythonInstallationCorruptErrorMessage
}

If (VerifyPythonExecutableMeetsMinimumRequirements -PythonExecutable $LocalMachinePythonExecutable) {
$PythonExecutable = $LocalMachinePythonExecutable
}
ElseIf (VerifyPythonExecutableMeetsMinimumRequirements -PythonExecutable $CurrentUserPythonExecutable) {
$PythonExecutable = $CurrentUserPythonExecutable
}
$CurrentUserPythonExecutable = FindLatestUsablePythonExecutableInRegistry "HKCU"
$LocalMachinePythonExecutable = FindLatestUsablePythonExecutableInRegistry "HKLM"

If ($LocalMachinePythonExecutable) {
$PythonExecutable = $LocalMachinePythonExecutable
}
ElseIf ($CurrentUserPythonExecutable) {
$PythonExecutable = $CurrentUserPythonExecutable
}
Else {
LogOutput "No valid Python installation found."

Expand Down
Loading