From 9033f840a5f53f2a1923a36cecf5a73f3d156a89 Mon Sep 17 00:00:00 2001 From: OCI DEX Release Bot Automation Date: Tue, 7 Jul 2026 12:01:14 +0000 Subject: [PATCH] Releasing version 3.89.1 Co-authored-by: Harsh Kumar --- CHANGELOG.rst | 19 ++++++++---- requirements.txt | 30 +++++++++++-------- scripts/install/README.rst | 2 +- .../devops/tests/integ/test_devops_build.py | 22 +++++++------- .../devops/tests/integ/test_devops_deploy.py | 14 ++++----- setup.py | 2 +- src/oci_cli/version.py | 2 +- .../test_json_skeleton_command_invocation.py | 2 +- 8 files changed, 54 insertions(+), 39 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d1fdb02cb..2ef660988 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -6,6 +6,15 @@ All notable changes to this project will be documented in this file. The format is based on `Keep a Changelog `__. +3.89.1 - 2026-07-07 +------------------- +Security +~~~~~~~~ +- Updated urllib3 dependency to `2.7.0` for python versions `>= 3.10` per: https://www.cve.org/CVERecord?id=CVE-2026-44432 and https://www.cve.org/CVERecord?id=CVE-2026-44431 +- Updated pyasn1 dependency to `0.5.0` for python versions `< 3.8` and `0.6.3` for `>= 3.8` per: https://www.cve.org/CVERecord?id=CVE-2026-30922 +- Updated pytest dependency to `7.0.1` for python versions `<= 3.10` and `9.0.3` for `>= 3.11` per: https://www.cve.org/CVERecord?id=CVE-2025-71176 + + 3.89.0 - 2026-06-30 ------------------- Added @@ -307,14 +316,14 @@ Added * ``oci network vnic assign-ipv6 --hostname`` * Database service - + * Support for Oracle Database Managed Software Updates on Oracle Exadata Database Service on Exascale Infrastructure (ExaDB-XS) * Support for creating database using managed software updates * ``oci db database create --msu-details`` * ``oci db database create-from-backup --msu-details`` - + * Support for updating existing database to register managed software updates * ``oci db database update --msu-details`` @@ -325,7 +334,7 @@ Added * Managed Kafka service - * Support for public connectivity addons in Oracle Streaming with Apache Kafka(OSAK) Service + * Support for public connectivity addons in Oracle Streaming with Apache Kafka(OSAK) Service * ``oci kafka addon-options list-addon-options`` * ``oci kafka cluster get-addon`` @@ -362,11 +371,11 @@ Changed * ``--cidrblock`` is now an optional parameter for creating subnet -   * ``oci network subnet create --cidrblock`` +   * ``oci network subnet create --cidrblock`` * [BREAKING] Support for workrequestid additions in AttachVolume, DetachVolume and TerminateInstance - * Allowed values for the parameter ``--wait-for-state`` are ACCEPTED, FAILED, IN_PROGRESS, SUCCEEDED in the following commands as it waits until the work request reaches a certain state + * Allowed values for the parameter ``--wait-for-state`` are ACCEPTED, FAILED, IN_PROGRESS, SUCCEEDED in the following commands as it waits until the work request reaches a certain state * ``oci compute volume-attachment detach --wait-for-state`` * ``oci compute instance terminate --wait-for-state`` diff --git a/requirements.txt b/requirements.txt index 54f77b150..8e84dc3db 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,7 +7,8 @@ arrow>=1.0.0,<2.0.0 certifi>=2025.1.31,<2026.0.0 cffi>=1.9.1,<2.0.0 click<=8.1.2 -coverage==4.5.2 +coverage==6.2; python_version < '3.9' +coverage==7.10.7; python_version >= '3.9' cryptography>=3.2.1,<47.0.0 httpsig-cffi==15.0.0 Jinja2<3.0.0; python_version == '3.6' @@ -15,18 +16,21 @@ 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.181.0 +oci==2.181.1 packaging>=22.0,<25.0; python_version > '3.8' packaging==20.2; python_version <= '3.8' -pluggy==0.13.0 +pluggy==0.13.0; python_version < '3.9' +pluggy==1.6.0; python_version >= '3.9' py==1.11.0 -pyasn1==0.2.3 +pyasn1==0.5.0; python_version < '3.8' +pyasn1==0.6.3; python_version >= '3.8' pyOpenSSL>=17.5.0,<27.0.0 pycparser==2.20 pyparsing==2.2.0 -pytest==4.6.10; python_version <= '3.9' -pytest==7.1.2; python_version >= '3.10' -pytest-cov==2.5.1 +pytest==7.0.1; python_version <= '3.10' +pytest==9.0.3; python_version >= '3.11' +pytest-cov==4.0.0; python_version < '3.9' +pytest-cov==7.1.0; python_version >= '3.9' python-dateutil>=2.5.3,<3.0.0 pytz>=2016.10,<=2026.2 requests==2.27.0; python_version == '3.6' @@ -37,13 +41,15 @@ sphinx==3.3.0; python_version < '3.13' sphinx==6.2.1; python_version == '3.13' sphinx-rtd-theme==0.4.3 terminaltables==3.1.10 -tox==3.23.0 +tox==3.28.0 vcrpy==1.13.0; python_version < '3.10' vcrpy==7.0.0; python_version >= '3.10' virtualenv==20.13.0; python_version <= '3.7' virtualenv>=20.26.6,<21.0.0; python_version > '3.7' -pytest-xdist==1.22.2 -pytest-forked==1.0.2 +pytest-xdist==3.0.2; python_version < '3.9' +pytest-xdist==3.8.0; python_version >= '3.9' +pytest-forked==1.4.0; python_version < '3.7' +pytest-forked==1.6.0; python_version >= '3.7' PyYAML>=5.4,<=6.0.2 docutils==0.15.2; python_version < '3.13' docutils==0.18.1; python_version == '3.13' @@ -54,5 +60,5 @@ setuptools==70.0.0; python_version == '3.8' setuptools==68.0.0; python_version == '3.7' setuptools==59.6.0; python_version == '3.6' # this is required because of python 3.6 requests dependency version bound -urllib3==2.6.3; python_version >= '3.10' -urllib3==1.26.20; python_version < '3.10' \ No newline at end of file +urllib3==2.7.0; python_version >= '3.10' +urllib3==1.26.20; python_version < '3.10' diff --git a/scripts/install/README.rst b/scripts/install/README.rst index d9daf7bf0..a65fe3332 100644 --- a/scripts/install/README.rst +++ b/scripts/install/README.rst @@ -79,5 +79,5 @@ Checksums ----------- install.sh 079dcc9a3e2a61ec692400e30169c9996b2998ac8c4e205198ed5863283fcb76 -install.ps1 324d9a873622ce8a2a95a6a141ff939fb632d0dca4fdb45de66eddfb8ce36c2a +install.ps1 1c877a82e35563fc0d54418625b437fe12ff95557111a86edb796791b1039866 install.py f66dc9e2b69cbbd269374db638ffa9c0b08a5a4ea0b836b81336d6581aab9eed diff --git a/services/devops/tests/integ/test_devops_build.py b/services/devops/tests/integ/test_devops_build.py index 0253da69b..c5f0f9da1 100644 --- a/services/devops/tests/integ/test_devops_build.py +++ b/services/devops/tests/integ/test_devops_build.py @@ -17,16 +17,16 @@ runner = runner() -@pytest.mark.skip('failed in validation') @pytest.fixture(autouse=True, scope='function') def vcr_fixture(request): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette('devops_build_{name}.yml'.format(name=request.function.__name__)): yield -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def project_and_pipeline(config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette('devops_build_project_and_pipeline_fixture.yml'): # create project notification_topic_id = 'ocid1.onstopic.oc1.iad.aaaaaaaatklfw3733kbwc2dzus633rb553dt52fdewujfea5tunntmqykmoq' @@ -105,9 +105,9 @@ def test_build_pipeline_update(project_and_pipeline, config_file, config_profile "Update API should return updated build pipeline description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def wait_stage(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_wait_stage_fixture.yml'): # create wait stage @@ -195,9 +195,9 @@ def test_wait_stage_update(project_and_pipeline, wait_stage, config_file, config "Update API should return updated build pipeline stage description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def build_stage(project_and_pipeline, github_connection, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_build_stage_fixture.yml'): # create build stage @@ -310,9 +310,9 @@ def test_build_stage_update(project_and_pipeline, build_stage, github_connection "Update API should return updated build pipeline stage description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def deliver_artifact_stage(project_and_pipeline, build_stage, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_deliver_artifact_stage_fixture.yml'): # create deliver artifact stage @@ -411,9 +411,9 @@ def test_deliver_artifact_stage_update( "Update API should return updated build pipeline stage description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def trigger_deployment_stage(project_and_pipeline, build_stage, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_trigger_deployment_stage_fixture.yml'): project_id = project_and_pipeline[0] @@ -516,9 +516,9 @@ def test_trigger_deployment_stage_update( "Update API should return updated build pipeline stage description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def build_run(project_and_pipeline, wait_stage, build_stage, github_connection, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_build_run_fixture.yml'): # start build run @@ -579,9 +579,9 @@ def test_build_run_list(project_and_pipeline, build_run, config_file, config_pro assert len(build_runs) > 0, "List API should return at least one build run" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def github_connection(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_github_connection_fixture.yml'): # create connection @@ -643,9 +643,9 @@ def test_github_connection_update(project_and_pipeline, github_connection, confi "Update API should return updated connection description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def gitlab_connection(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_gitlab_connection_fixture.yml'): # create connection @@ -706,9 +706,9 @@ def test_gitlab_connection_update(project_and_pipeline, gitlab_connection, confi "Update API should return updated connection description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def github_trigger(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_github_trigger_fixture.yml'): # create trigger @@ -790,9 +790,9 @@ def test_github_trigger_update(project_and_pipeline, github_trigger, config_file "Update API should return updated trigger description" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def gitlab_trigger(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_build_gitlab_trigger_fixture.yml'): # create trigger diff --git a/services/devops/tests/integ/test_devops_deploy.py b/services/devops/tests/integ/test_devops_deploy.py index 36482e2df..cb8f0f9c2 100644 --- a/services/devops/tests/integ/test_devops_deploy.py +++ b/services/devops/tests/integ/test_devops_deploy.py @@ -14,16 +14,16 @@ runner = runner() -@pytest.mark.skip('failed in validation') @pytest.fixture(autouse=True, scope='function') def vcr_fixture(request): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette('devops_deploy_{name}.yml'.format(name=request.function.__name__)): yield -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def project_and_pipeline(config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette('devops_deploy_test_project_and_pipeline_fixture.yml'): # create project notification_topic_id = 'ocid1.onstopic.oc1.phx.aaaaaaaa3kvkxuoaqazlomtuu4xdfdsjtlph3uyopf4y6zmv72wilmw6egsq' @@ -64,9 +64,9 @@ def project_and_pipeline(config_file, config_profile): util.validate_response(result) -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def deploy_helm_repository_artifact(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_deploy_artifact_helm_repository_artifact_fixture.yml'): # create deploy artifact @@ -103,9 +103,9 @@ def test_get_helm_repository_artifact(deploy_helm_repository_artifact, config_fi "Get Deploy Artifact API should return correct deploy artifact id" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def deploy_helm_repository_artifact_verification_key_source(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_deploy_artifact_helm_repository_artifact_verification_key_source_fixture.yml'): # create deploy artifact @@ -182,9 +182,9 @@ def test_get_helm_repository_artifact_verification_source(deploy_helm_repository "Get Deploy Artifact API should return correct vault secret OCID" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def deploy_oke_cluster_environment(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_deploy_environment_oke_cluster_environment_fixture.yml'): # create deploy environment @@ -217,9 +217,9 @@ def test_get_oke_cluster_environment(deploy_oke_cluster_environment, config_file "Get Deploy Environment API should return correct deploy environment id" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def deploy_oke_helm_chart_stage(project_and_pipeline, deploy_helm_repository_artifact, deploy_oke_cluster_environment, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_deploy_stage_oke_helm_chart_stage_fixture.yml'): # create deploy stage @@ -292,9 +292,9 @@ def test_get_deploy_oke_helm_chart_stage(deploy_oke_helm_chart_stage, config_fil "Get Deploy Stage API should return correct should-cleanup-on-fail value" -@pytest.mark.skip('failed in validation') @pytest.fixture(scope='module') def dry_run_pipeline_deployment(project_and_pipeline, config_file, config_profile): + pytest.skip('failed in validation') with test_config_container.create_vcr(cassette_library_dir=CASSETTE_LIBRARY_DIR).use_cassette( 'devops_deploy_deployment_dry_run_fixture.yml'): pipeline_id = project_and_pipeline[1] diff --git a/setup.py b/setup.py index a38b828d1..11fef9c1a 100644 --- a/setup.py +++ b/setup.py @@ -30,7 +30,7 @@ def open_relative(*path): readme = f.read() requires = [ - 'oci==2.181.0', + 'oci==2.181.1', 'arrow>=1.0.0,<2.0.0', 'certifi>=2025.1.31,<2026.0.0', 'click<=8.1.2', diff --git a/src/oci_cli/version.py b/src/oci_cli/version.py index 8fbc01e62..438b5ffc7 100644 --- a/src/oci_cli/version.py +++ b/src/oci_cli/version.py @@ -2,4 +2,4 @@ # Copyright (c) 2016, 2026, Oracle and/or its affiliates. All rights reserved. # This software is dual-licensed to you under the Universal Permissive License (UPL) 1.0 as shown at https://oss.oracle.com/licenses/upl or Apache License 2.0 as shown at http://www.apache.org/licenses/LICENSE-2.0. You may choose either license. -__version__ = '3.89.0' +__version__ = '3.89.1' diff --git a/tests/test_json_skeleton_command_invocation.py b/tests/test_json_skeleton_command_invocation.py index 8e1b89c48..3682f7eaf 100644 --- a/tests/test_json_skeleton_command_invocation.py +++ b/tests/test_json_skeleton_command_invocation.py @@ -93,9 +93,9 @@ def prepare_input_file_folder(): shutil.rmtree(INPUT_FILE_FOLDER) -@pytest.mark.skip('Skipped to allow DEX-14528') @pytest.fixture(scope='module') def network_resources(): + pytest.skip("Skipped to allow DEX-14528") with test_config_container.create_vcr().use_cassette('json_skeleton_command_invoke_fixture_network_resources.yml'): vcn_name = util.random_name('cli_test_json_skeleton') cidr_block = "10.0.0.0/16"