From be7ab74722399975833c1ad744c0013ead564936 Mon Sep 17 00:00:00 2001 From: OpenStack Release Bot Date: Fri, 19 Sep 2025 12:29:27 +0000 Subject: [PATCH 1/8] Update .gitreview for stable/2025.2 Change-Id: I0c3b89fb5e0e772346734f6737cf8046b79f459b Signed-off-by: OpenStack Release Bot Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/functions --- .gitreview | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitreview b/.gitreview index e1bf63ba7a..805ffd6d95 100644 --- a/.gitreview +++ b/.gitreview @@ -2,3 +2,4 @@ host=review.opendev.org port=29418 project=openstack/devstack.git +defaultbranch=stable/2025.2 From 329dd91e2f43a7d4c7320d7c54c86e19e6276a81 Mon Sep 17 00:00:00 2001 From: OpenStack Release Bot Date: Fri, 19 Sep 2025 12:29:29 +0000 Subject: [PATCH 2/8] Update TOX_CONSTRAINTS_FILE for stable/2025.2 Update the URL to the upper-constraints file to point to the redirect rule on releases.openstack.org so that anyone working on this branch will switch to the correct upper-constraints list automatically when the requirements repository branches. Until the requirements repository has as stable/2025.2 branch, tests will continue to use the upper-constraints list on master. Change-Id: I3450d49cc45e09e370358308c661388de5b7d43f Signed-off-by: OpenStack Release Bot Generated-By: openstack/project-config:roles/copy-release-tools-scripts/files/release-tools/functions --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index 26cd68c031..02224c620e 100644 --- a/tox.ini +++ b/tox.ini @@ -35,7 +35,7 @@ commands = bash -c "find {toxinidir} \ [testenv:docs] deps = - -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master} + -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2025.2} -r{toxinidir}/doc/requirements.txt allowlist_externals = bash setenv = From dd4bc3e1513f24a1eee67d1fe9b02493d80e8676 Mon Sep 17 00:00:00 2001 From: Ghanshyam Maan Date: Mon, 22 Sep 2025 05:51:39 +0000 Subject: [PATCH 3/8] Update devstack stable/2025.2 branch setting Change-Id: I9594e7ea33e707dd27bd53a64ab01d781b9dd554 Signed-off-by: Ghanshyam Maan --- stackrc | 2 +- tests/test_libs_from_pypi.sh | 12 ------------ 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/stackrc b/stackrc index 1e306cc685..d429640156 100644 --- a/stackrc +++ b/stackrc @@ -15,7 +15,7 @@ source $RC_DIR/functions # Set the target branch. This is used so that stable branching # does not need to update each repo below. -TARGET_BRANCH=master +TARGET_BRANCH=stable/2025.2 # Cycle trailing projects need to branch later than the others. TRAILING_TARGET_BRANCH=master diff --git a/tests/test_libs_from_pypi.sh b/tests/test_libs_from_pypi.sh index 9552c93c4f..451d847c66 100755 --- a/tests/test_libs_from_pypi.sh +++ b/tests/test_libs_from_pypi.sh @@ -96,19 +96,7 @@ function test_libs_exist { echo "test_libs_exist PASSED" } -function test_branch_master { - for lib in $ALL_LIBS; do - if [[ ${GITBRANCH[$lib]} != "master" ]]; then - echo "GITBRANCH for $lib not master (${GITBRANCH[$lib]})" - exit 1 - fi - done - - echo "test_branch_master PASSED" -} - set -o errexit test_libs_exist -test_branch_master test_all_libs_upto_date From 5d918726ab7b04a8f8403f6390f4c31f1bd94bac Mon Sep 17 00:00:00 2001 From: Ghanshyam Maan Date: Mon, 22 Sep 2025 05:57:02 +0000 Subject: [PATCH 4/8] Stop installing Tempest at system wide for stable branch As added in notes for INSTALL_TEMPEST variable we need to set this as False for stable branch so that devstack does not install Tempest at system wide. Change-Id: I71e870f47df0c534416deed24946ba3cf68ac332 Signed-off-by: Ghanshyam Maan --- lib/tempest | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/tempest b/lib/tempest index 1ebe9c5f1f..dfa6f702be 100644 --- a/lib/tempest +++ b/lib/tempest @@ -59,7 +59,7 @@ BUILD_TIMEOUT=${BUILD_TIMEOUT:-196} # This must be False on stable branches, as master tempest # deps do not match stable branch deps. Set this to True to # have tempest installed in DevStack by default. -INSTALL_TEMPEST=${INSTALL_TEMPEST:-"True"} +INSTALL_TEMPEST=${INSTALL_TEMPEST:-"False"} # This variable is passed directly to pip install inside the common tox venv # that is created From ea97a5bc0a85fc852e8c747b164e10991cc4d666 Mon Sep 17 00:00:00 2001 From: Ghanshyam Maan Date: Mon, 22 Sep 2025 06:03:20 +0000 Subject: [PATCH 5/8] Cap API max microversions for stable/2025.2 This commit cap the API max microversions for compute, volume and placement API for stable/2025.2. Compute - https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/rest_api_version_history.rst#2100-maximum-in-20251-epoxy Volume - https://github.com/openstack/cinder/blob/master/cinder/api/openstack/rest_api_version_history.rst#371 Placement - https://github.com/openstack/placement/blob/master/placement/rest_api_version_history.rst#139---support-for-the-any-traits-syntax-in-the-required-parameter Change-Id: Ic40befb1567851976562bfbe8311e494f47d3806 Signed-off-by: Ghanshyam Maan --- lib/tempest | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/tempest b/lib/tempest index dfa6f702be..6046d177bd 100644 --- a/lib/tempest +++ b/lib/tempest @@ -483,11 +483,12 @@ function configure_tempest { # Compute Features # Set the microversion range for compute tests. # This is used to run the Nova microversions tests. - # Setting [None, latest] range of microversion which allow Tempest to run all microversions tests. + # Setting [None, 2.100] range of microversion which allow Tempest to run all microversions tests + # on stable/2025.2. # NOTE- To avoid microversion tests failure on stable branch, we need to change "tempest_compute_max_microversion" # for stable branch on each release which should be changed from "latest" to max supported version of that release. local tempest_compute_min_microversion=${TEMPEST_COMPUTE_MIN_MICROVERSION:-None} - local tempest_compute_max_microversion=${TEMPEST_COMPUTE_MAX_MICROVERSION:-"latest"} + local tempest_compute_max_microversion=${TEMPEST_COMPUTE_MAX_MICROVERSION:-"2.100"} # Reset microversions to None where v2.0 is running which does not support microversion. # Both "None" means no microversion testing. if [[ "$TEMPEST_COMPUTE_TYPE" == "compute_legacy" ]]; then @@ -605,7 +606,7 @@ function configure_tempest { iniset $TEMPEST_CONFIG volume backup_driver swift fi local tempest_volume_min_microversion=${TEMPEST_VOLUME_MIN_MICROVERSION:-None} - local tempest_volume_max_microversion=${TEMPEST_VOLUME_MAX_MICROVERSION:-"latest"} + local tempest_volume_max_microversion=${TEMPEST_VOLUME_MAX_MICROVERSION:-"3.71"} if [ "$tempest_volume_min_microversion" == "None" ]; then inicomment $TEMPEST_CONFIG volume min_microversion else @@ -660,11 +661,12 @@ function configure_tempest { # Placement Features # Set the microversion range for placement. - # Setting [None, latest] range of microversion which allow Tempest to run all microversions tests. + # Setting [None, 1.39] range of microversion which allow Tempest to run all microversions tests + # on stable/2025.2. # NOTE- To avoid microversion tests failure on stable branch, we need to change "tempest_placement_max_microversion" # for stable branch on each release which should be changed from "latest" to max supported version of that release. local tempest_placement_min_microversion=${TEMPEST_PLACEMENT_MIN_MICROVERSION:-None} - local tempest_placement_max_microversion=${TEMPEST_PLACEMENT_MAX_MICROVERSION:-"latest"} + local tempest_placement_max_microversion=${TEMPEST_PLACEMENT_MAX_MICROVERSION:-"1.39"} if [ "$tempest_placement_min_microversion" == "None" ]; then inicomment $TEMPEST_CONFIG placement min_microversion else From 89c4c949d354b5807f3d0e38337b66fe29c31b5d Mon Sep 17 00:00:00 2001 From: Ghanshyam Date: Fri, 21 Nov 2025 20:37:55 +0000 Subject: [PATCH 6/8] Cap stable/2025.2 network, swift, volume api_extensions for tempest This commit cap the network, volume and swift extensions on Tempest's config option api_extensions. In 2025.2, no new extension in neutron. and no new extensions in swift and cinder. Change-Id: I198aa627c91fd95e2fe20842a4969536b877d67b Signed-off-by: Ghanshyam --- lib/tempest | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 57 insertions(+), 3 deletions(-) diff --git a/lib/tempest b/lib/tempest index 6046d177bd..3651b87a55 100644 --- a/lib/tempest +++ b/lib/tempest @@ -807,7 +807,47 @@ function configure_tempest { DISABLE_NETWORK_API_EXTENSIONS+=", l3_agent_scheduler" fi - local network_api_extensions=${NETWORK_API_EXTENSIONS:-"all"} + DEFAULT_NET_EXT="address-scope,agent,allowed-address-pairs,auto-allocated-topology" + DEFAULT_NET_EXT+=",availability_zone,binding,default-subnetpools,dhcp_agent_scheduler" + DEFAULT_NET_EXT+=",dvr,ext-gw-mode,external-net,extra_dhcp_opt,extraroute,flavors" + DEFAULT_NET_EXT+=",l3-flavors,l3-ha,l3_agent_scheduler,multi-provider,net-mtu" + DEFAULT_NET_EXT+=",network-ip-availability,network_availability_zone,pagination" + DEFAULT_NET_EXT+=",port-security,project-id,provider,quotas,quota_details,rbac-policies" + DEFAULT_NET_EXT+=",revision-if-match,router,router_availability_zone,security-group,service-type,sorting" + DEFAULT_NET_EXT+=",standard-attr-description,standard-attr-revisions,standard-attr-tag,standard-attr-timestamp" + DEFAULT_NET_EXT+=",subnet-service-types,subnet_allocation,net-mtu-writable,ip-substring-filtering" + DEFAULT_NET_EXT+=",availability_zone_filter,filter-validation,empty-string-filtering,port-mac-address-regenerate" + DEFAULT_NET_EXT+=",port-security-groups-filtering,fip-port-details,binding-extended" + DEFAULT_NET_EXT+=",subnet_onboard,l3-port-ip-change-not-allowed,agent-resources-synced" + DEFAULT_NET_EXT+=",floatingip-pools,rbac-security-groups,subnetpool-prefix-ops,router-admin-state-down-before-update" + DEFAULT_NET_EXT+=",rbac-subnetpool,tag-ports-during-bulk-creation,stateful-security-group,address-group,extraroute-atomic" + DEFAULT_NET_EXT+=",port-numa-affinity-policy,rbac-address-scope,security-groups-remote-address-group,trunk,trunk-details" + DEFAULT_NET_EXT+=",rbac-address-group,port-device-profile" + DEFAULT_NET_EXT+=",multiple-external-gateways,qos-pps-minimum,l3-ext-ndp-proxy,rbac-bgpvpn" + DEFAULT_NET_EXT+=",qos-pps,ecmp_routes,bgp,floating-ip-port-forwarding-port-ranges" + # New in Yoga + DEFAULT_NET_EXT+=",security-groups-shared-filtering,security-groups-normalized-cidr,quota-check-limit" + DEFAULT_NET_EXT+=",port-resource-request-groups" + # New in Zed + DEFAULT_NET_EXT+=",port-mac-override,floating-ip-port-forwarding-detail,network-cascade-delete" + # New in 2023.1 + DEFAULT_NET_EXT+=",port-hints,floating-ip-distributed" + # New in 2023.2 + DEFAULT_NET_EXT+=",port-hint-ovs-tx-steering,enable-default-route-bfd" + DEFAULT_NET_EXT+=",enable-default-route-ecmp,standard-attr-fwaas-v2" + DEFAULT_NET_EXT+=",allowed-address-pairs-atomic,network_ha" + DEFAULT_NET_EXT+=",security-groups-rules-belongs-to-default-sg" + DEFAULT_NET_EXT+=",port-hardware-offload-type" + # New in 2024.1 + DEFAULT_NET_EXT+=",vpn-aes-ccm-gcm,tap-mirror,subnet-external-network" + DEFAULT_NET_EXT+=",port-numa-affinity-policy-socket" + # New in 2024.2 + DEFAULT_NET_EXT+=",tag-creation,quota-check-limit-default,port-trusted-vif" + DEFAULT_NET_EXT+=",uplink-status-propagation-updatable" + # New in 2025.1 + DEFAULT_NET_EXT+=",qing,vpn-aes-ctr" + # New in 2025.2: None + local network_api_extensions=${NETWORK_API_EXTENSIONS:-$DEFAULT_NET_EXT} if [[ ! -z "$DISABLE_NETWORK_API_EXTENSIONS" ]]; then # Enabled extensions are either the ones explicitly specified or those available on the API endpoint network_api_extensions=${NETWORK_API_EXTENSIONS:-$(iniget $tmp_cfg_file network-feature-enabled api_extensions | tr -d " ")} @@ -819,7 +859,10 @@ function configure_tempest { fi iniset $TEMPEST_CONFIG network-feature-enabled api_extensions $network_api_extensions # Swift API Extensions - local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-"all"} + DEFAULT_SWIFT_OPT="account_quotas,bulk_delete,bulk_upload,container_quotas" + DEFAULT_SWIFT_OPT+=",container_sync,crossdomain,formpost,ratelimit,slo" + DEFAULT_SWIFT_OPT+=",staticweb,tempauth,tempurl,versioned_writes" + local object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$DEFAULT_SWIFT_OPT} if [[ ! -z "$DISABLE_OBJECT_STORAGE_API_EXTENSIONS" ]]; then # Enabled extensions are either the ones explicitly specified or those available on the API endpoint object_storage_api_extensions=${OBJECT_STORAGE_API_EXTENSIONS:-$(iniget $tmp_cfg_file object-storage-feature-enabled discoverable_apis | tr -d " ")} @@ -828,7 +871,18 @@ function configure_tempest { fi iniset $TEMPEST_CONFIG object-storage-feature-enabled discoverable_apis $object_storage_api_extensions # Cinder API Extensions - local volume_api_extensions=${VOLUME_API_EXTENSIONS:-"all"} + DEFAULT_VOL_EXT="OS-SCH-HNT,backups,capabilities,cgsnapshots,consistencygroups" + DEFAULT_VOL_EXT+=",encryption,os-admin-actions,os-availability-zone" + DEFAULT_VOL_EXT+=",os-extended-services,os-extended-snapshot-attributes" + DEFAULT_VOL_EXT+=",os-hosts,os-quota-class-sets,os-quota-sets" + DEFAULT_VOL_EXT+=",os-services,os-snapshot-actions,os-snapshot-manage" + DEFAULT_VOL_EXT+=",os-snapshot-unmanage,os-types-extra-specs,os-types-manage" + DEFAULT_VOL_EXT+=",os-used-limits,os-vol-host-attr,os-vol-image-meta" + DEFAULT_VOL_EXT+=",os-vol-mig-status-attr,os-vol-tenant-attr,os-volume-actions" + DEFAULT_VOL_EXT+=",os-volume-encryption-metadata,os-volume-manage" + DEFAULT_VOL_EXT+=",os-volume-transfer,os-volume-type-access" + DEFAULT_VOL_EXT+=",os-volume-unmanage,qos-specs,scheduler-stats" + local volume_api_extensions=${VOLUME_API_EXTENSIONS:-$DEFAULT_VOL_EXT} if [[ ! -z "$DISABLE_VOLUME_API_EXTENSIONS" ]]; then # Enabled extensions are either the ones explicitly specified or those available on the API endpoint volume_api_extensions=${VOLUME_API_EXTENSIONS:-$(iniget $tmp_cfg_file volume-feature-enabled api_extensions | tr -d " ")} From 1dee5d0cde64e2d8c8525723e3dfc4cc3488482f Mon Sep 17 00:00:00 2001 From: Stephen Finucane Date: Mon, 9 Feb 2026 11:41:14 +0000 Subject: [PATCH 7/8] [Stable-Only] Pin setuptools setuptools 82.0.0 dropped support for the legacy 'pkg_resources' library. While most users of this (including the all important pbr library) have been updated to remove references to 'pkg_resources' on current master, this is not true for historical releases. Pin the setuptools version used on these historic branches and disable build isolation to work around this. Change-Id: Icf07fa246b3532f939d20e3cbea32cc0b7b439ed Signed-off-by: Stephen Finucane --- inc/python | 7 ++++++- lib/infra | 4 +++- tox.ini | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/inc/python b/inc/python index cd90ac82c6..73928ac48b 100644 --- a/inc/python +++ b/inc/python @@ -41,7 +41,9 @@ function setup_devstack_virtualenv { # This package is currently installed via the distro and not # available on pypi. $PYTHON -m venv --system-site-packages "${DEVSTACK_VENV}" - pip_install -U pip setuptools[core] + # NOTE(stephenfin) stable-only change to pin setuptools to the last + # version to support pkg_resources + pip_install -U pip 'setuptools[core]<82.0.0' fi if [[ ":$PATH:" != *":$DEVSTACK_VENV/bin:"* ]] ; then export PATH="$DEVSTACK_VENV/bin:$PATH" @@ -203,6 +205,9 @@ function pip_install { cmd_pip="$cmd_pip install" # Always apply constraints cmd_pip="$cmd_pip -c $REQUIREMENTS_DIR/upper-constraints.txt" + # NOTE(stephenfin): stable-only change to disable build-isolation so that + # we can pin setuptools on these old branches + cmd_pip="$cmd_pip --no-build-isolation" $xtrace diff --git a/lib/infra b/lib/infra index f4760c352c..1318548d9f 100644 --- a/lib/infra +++ b/lib/infra @@ -31,7 +31,9 @@ function install_infra { local PIP_VIRTUAL_ENV="$REQUIREMENTS_DIR/.venv" [ ! -d $PIP_VIRTUAL_ENV ] && ${VIRTUALENV_CMD} $PIP_VIRTUAL_ENV # We don't care about testing git pbr in the requirements venv. - PIP_VIRTUAL_ENV=$PIP_VIRTUAL_ENV pip_install -U pbr setuptools[core] + # NOTE(stephenfin) stable-only change to pin setuptools to the last version + # to support pkg_resources + PIP_VIRTUAL_ENV=$PIP_VIRTUAL_ENV pip_install -U pbr 'setuptools[core]<82.0.0' PIP_VIRTUAL_ENV=$PIP_VIRTUAL_ENV pip_install $REQUIREMENTS_DIR # Unset the PIP_VIRTUAL_ENV so that PBR does not end up trapped diff --git a/tox.ini b/tox.ini index 02224c620e..8017329d02 100644 --- a/tox.ini +++ b/tox.ini @@ -37,6 +37,8 @@ commands = bash -c "find {toxinidir} \ deps = -c{env:TOX_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/2025.2} -r{toxinidir}/doc/requirements.txt + # NOTE(stephenfin): pin setuptools to the last version to support pkg_resources + setuptools<82.0.0 allowlist_externals = bash setenv = TOP_DIR={toxinidir} From 58e156c2cd144283e8aea6432a9468cdaefc3972 Mon Sep 17 00:00:00 2001 From: Jaromir Wysoglad Date: Mon, 16 Feb 2026 09:13:16 -0500 Subject: [PATCH 8/8] [Stable-Only] Enable build isolation for gnocchi Disabling the build isolation breaks installing gnocchi, which results in telemetry tests failing on stable branches as well as the grenade test failing for ceilometer on master. Change-Id: I00f504b80d087072a32e0e64e46b7dff4b2ff683 Signed-off-by: Jaromir Wysoglad --- inc/python | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/inc/python b/inc/python index 73928ac48b..55edc7f05b 100644 --- a/inc/python +++ b/inc/python @@ -207,7 +207,11 @@ function pip_install { cmd_pip="$cmd_pip -c $REQUIREMENTS_DIR/upper-constraints.txt" # NOTE(stephenfin): stable-only change to disable build-isolation so that # we can pin setuptools on these old branches - cmd_pip="$cmd_pip --no-build-isolation" + # NOTE(jwysogla): Gnocchi doesn't install correctly without + # build-isolation, so disable it only if we aren't installing Gnocchi + if [[ ! "$@" =~ "gnocchi" ]]; then + cmd_pip="$cmd_pip --no-build-isolation" + fi $xtrace