Skip to content

Updating version numbers for release 24.0.0-SNAPSHOT - #14041

Open
wido wants to merge 1 commit into
apache:mainfrom
wido:v24
Open

Updating version numbers for release 24.0.0-SNAPSHOT#14041
wido wants to merge 1 commit into
apache:mainfrom
wido:v24

Conversation

@wido

@wido wido commented Sep 2, 2026

Copy link
Copy Markdown
Contributor

Description

Following the [VOTE] "Version naming: drop the "4." prefix starting with release 24" on dev@cloudstack.apache.org, started on 14 August 2026 and closed on 21 August 2026 at 12:00 UTC, the release that would have been 4.24 is released as 24, i.e. 24.0.0. Subsequent feature releases become 25, 26, and so on, and maintenance releases on the 24 branch become 24.1.0, 24.2.0, and so on.

The vote passed by lazy majority with 4 binding +1 votes (Wido den Hollander, Daan Hoogland, Kiran Chavala, Vishesh Jindal), 1 non-binding +1 (Simon Weller), 1 +0 (Abhishek) and 1 -1 (Joao Jandre Paraquetti).

This changes the version only, touching the same files that tools/build/setnextversion.sh does:

  • in all pom.xml files
  • debian/changelog
  • tools/marvin/setup.py
  • tools/docker/Dockerfile, Dockerfile.marvin and Dockerfile.s390x

The leading "4." has not carried any meaning for many years. Dropping it does not affect the release cadence, the LTS policy, the branching and release process or the backwards-compatibility guarantees, and it is not a signal that 24 breaks APIs or introduces disruptive changes.

org.apache.cloudstack.utils.CloudStackVersion already parses and compares both three and four position versions, normalising 24.0.0 to 24.0.0.0, so 24.0.0 still compares greater than 4.23.0.0.

Vote thread:
http://www.mail-archive.com/dev@cloudstack.apache.org/msg107393.html

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)
  • Build/CI
  • Test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

Bug Severity

  • BLOCKER
  • Critical
  • Major
  • Minor
  • Trivial

Screenshots (if appropriate):

How Has This Been Tested?

Local builds have been run, all compiles

@codecov

codecov Bot commented Sep 2, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 19.78%. Comparing base (b7a834b) to head (d32d784).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff            @@
##               main   #14041   +/-   ##
=========================================
  Coverage     19.78%   19.78%           
+ Complexity    19998    19996    -2     
=========================================
  Files          6371     6371           
  Lines        575899   575899           
  Branches      70495    70495           
=========================================
+ Hits         113967   113969    +2     
- Misses       449501   449505    +4     
+ Partials      12431    12425    -6     
Flag Coverage Δ
uitests 3.53% <ø> (ø)
unittests 21.06% <ø> (+<0.01%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@DaanHoogland DaanHoogland left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

clgtm

@nvazquez nvazquez left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @wido - largely looks good. Just a question, are we keeping the schema upgrade SQL path files named as before or those should also be updated?

@Pearl1594 Pearl1594 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Most changes have been taken care of.
Just wondering if we also need to look at the ci workflow here: https://github.com/apache/cloudstack/blob/main/.github/workflows/docker-cloudstack-simulator.yml#L24-L26 - it only triggers the docker image build on tags matching 4.* / 5.*, so once we start tagging releases as 24.0.0 etc, this workflow won't pick it up and the image build would just silently not run.

Also, since we've been following the 4.x naming for several years, its pretty likely contributors may keep writing since = "4.24.0" out of muscle memory despite this being communicated. Do you think it makes sense / would help to add a pre-commit hook to catch that automatically instead of relying on reviewers to spot it every time? This could be done on a separate PR too - we could add the hook to .pre-commit-config.yaml

@wido

wido commented Sep 2, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @wido - largely looks good. Just a question, are we keeping the schema upgrade SQL path files named as before or those should also be updated?

Good one. I only did a search and replace, but these files need to be renamed indeed. Let me check that and push a new commit if needed

Most changes have been taken care of. Just wondering if we also need to look at the ci workflow here: https://github.com/apache/cloudstack/blob/main/.github/workflows/docker-cloudstack-simulator.yml#L24-L26 - it only triggers the docker image build on tags matching 4.* / 5.*, so once we start tagging releases as 24.0.0 etc, this workflow won't pick it up and the image build would just silently not run.

Also, since we've been following the 4.x naming for several years, its pretty likely contributors may keep writing since = "4.24.0" out of muscle memory despite this being communicated. Do you think it makes sense / would help to add a pre-commit hook to catch that automatically instead of relying on reviewers to spot it every time? This could be done on a separate PR too - we could add the hook to .pre-commit-config.yaml

That pre-commit hook looks good, can you make a PR for this? I'm not really a big commit hook genius :-)

Comment thread .github/workflows/docker-cloudstack-simulator.yml Outdated
Following the [VOTE] "Version naming: drop the "4." prefix starting with
release 24" on dev@cloudstack.apache.org, started on 14 August 2026 and
closed on 21 August 2026 at 12:00 UTC, the release that would have been
4.24 is released as 24, i.e. 24.0.0. Subsequent feature releases become
25, 26, and so on, and maintenance releases on the 24 branch become
24.1.0, 24.2.0, and so on.

The vote passed by lazy majority with 4 binding +1 votes (Wido den
Hollander, Daan Hoogland, Kiran Chavala, Vishesh Jindal), 1 non-binding
+1 (Simon Weller), 1 +0 (Abhishek) and 1 -1 (Joao Jandre Paraquetti).

This changes the version only, touching the same files that
tools/build/setnextversion.sh does:

  * <version> in all pom.xml files
  * debian/changelog
  * tools/marvin/setup.py
  * tools/docker/Dockerfile, Dockerfile.marvin and Dockerfile.s390x

Two places additionally assumed the version string starts with a single
digit followed by a dot, which no longer holds now that the version is
24.0.0-SNAPSHOT instead of 4.24.0.0-SNAPSHOT, and are fixed here as well:

  * packaging/package.sh picked the version out of the maven-help-plugin
    output with 'grep ^[0-9]\.', which does not match 24.0.0-SNAPSHOT.
    That left VERSION empty and failed the el8, el9, debian and suse15
    packaging jobs. It now uses 'grep -E ^[0-9]+\.'.
  * the docker-cloudstack-simulator workflow only triggered on tags
    matching 4.* and 5.*, so a 24.0.0 tag would silently not build an
    image. Those patterns are replaced by a single '[0-9]+.[0-9]+.*'
    which matches any numeric release tag under either naming scheme.
    Reported by @nvazquez.

The leading "4." has not carried any meaning for many years. Dropping it
does not affect the release cadence, the LTS policy, the branching and
release process or the backwards-compatibility guarantees, and it is not
a signal that 24 breaks APIs or introduces disruptive changes.

org.apache.cloudstack.utils.CloudStackVersion already parses and compares
both three and four position versions, normalising 24.0.0 to 24.0.0.0, so
24.0.0 still compares greater than 4.23.0.0.

Vote thread:
http://www.mail-archive.com/dev@cloudstack.apache.org/msg107393.html

Signed-off-by: Wido den Hollander <wido@widodh.nl>
@weizhouapache

Copy link
Copy Markdown
Member

@blueorangutan package

@weizhouapache

Copy link
Copy Markdown
Member

we may need Trillian changes too

@Pearl1594

Copy link
Copy Markdown
Contributor

Thanks @wido - largely looks good. Just a question, are we keeping the schema upgrade SQL path files named as before or those should also be updated?

Good one. I only did a search and replace, but these files need to be renamed indeed. Let me check that and push a new commit if needed

Most changes have been taken care of. Just wondering if we also need to look at the ci workflow here: https://github.com/apache/cloudstack/blob/main/.github/workflows/docker-cloudstack-simulator.yml#L24-L26 - it only triggers the docker image build on tags matching 4.* / 5.*, so once we start tagging releases as 24.0.0 etc, this workflow won't pick it up and the image build would just silently not run.
Also, since we've been following the 4.x naming for several years, its pretty likely contributors may keep writing since = "4.24.0" out of muscle memory despite this being communicated. Do you think it makes sense / would help to add a pre-commit hook to catch that automatically instead of relying on reviewers to spot it every time? This could be done on a separate PR too - we could add the hook to .pre-commit-config.yaml

That pre-commit hook looks good, can you make a PR for this? I'm not really a big commit hook genius :-)

Sure, can do it once this PR gets merged.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19073

@apache apache deleted a comment from blueorangutan Sep 3, 2026
@apache apache deleted a comment from blueorangutan Sep 3, 2026
@blueorangutan

Copy link
Copy Markdown

[SF] Trillian Build Failed (tid-16881)

@weizhouapache

Copy link
Copy Markdown
Member

@blueorangutan test

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@blueorangutan

Copy link
Copy Markdown

[SF] Trillian test result (tid-16888)
Environment: kvm-ol8 (x2), zone: Advanced Networking with Mgmt server ol8
Total time taken: 1495 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr14041-t16888-kvm-ol8.zip
Smoke tests completed. 0 look OK, 0 have errors, 156 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
all_test_2fa Skipped --- test_2fa.py
all_test_account_access Skipped --- test_account_access.py
all_test_accounts Skipped --- test_accounts.py
all_test_affinity_groups_projects Skipped --- test_affinity_groups_projects.py
all_test_affinity_groups Skipped --- test_affinity_groups.py
all_test_annotations Skipped --- test_annotations.py
all_test_async_job Skipped --- test_async_job.py
all_test_attach_multiple_volumes Skipped --- test_attach_multiple_volumes.py
all_test_backup_recovery_dummy Skipped --- test_backup_recovery_dummy.py
all_test_backup_recovery_kboss Skipped --- test_backup_recovery_kboss.py
all_test_backup_recovery_nas Skipped --- test_backup_recovery_nas.py
all_test_backup_recovery_veeam Skipped --- test_backup_recovery_veeam.py
all_test_bucket Skipped --- test_bucket.py
all_test_certauthority_root Skipped --- test_certauthority_root.py
all_test_cluster_drs Skipped --- test_cluster_drs.py
all_test_console_endpoint Skipped --- test_console_endpoint.py
all_test_create_list_domain_account_project Skipped --- test_create_list_domain_account_project.py
all_test_create_network Skipped --- test_create_network.py
all_test_deploy_vgpu_enabled_vm Skipped --- test_deploy_vgpu_enabled_vm.py
all_test_deploy_virtio_scsi_vm Skipped --- test_deploy_virtio_scsi_vm.py
all_test_deploy_vm_extra_config_data Skipped --- test_deploy_vm_extra_config_data.py
all_test_deploy_vm_iso Skipped --- test_deploy_vm_iso.py
all_test_deploy_vm_iso_uefi Skipped --- test_deploy_vm_iso_uefi.py
all_test_deploy_vm_root_resize Skipped --- test_deploy_vm_root_resize.py
all_test_deploy_vms_in_parallel Skipped --- test_deploy_vms_in_parallel.py
all_test_deploy_vms_with_varied_deploymentplanners Skipped --- test_deploy_vms_with_varied_deploymentplanners.py
all_test_deploy_vm_with_userdata Skipped --- test_deploy_vm_with_userdata.py
all_test_diagnostics Skipped --- test_diagnostics.py
all_test_direct_download Skipped --- test_direct_download.py
all_test_disk_offerings Skipped --- test_disk_offerings.py
all_test_disk_provisioning_types Skipped --- test_disk_provisioning_types.py
all_test_dns_framework_powerdns Skipped --- test_dns_framework_powerdns.py
all_test_domain_disk_offerings Skipped --- test_domain_disk_offerings.py
all_test_domain_network_offerings Skipped --- test_domain_network_offerings.py
all_test_domain_service_offerings Skipped --- test_domain_service_offerings.py
all_test_domain_vpc_offerings Skipped --- test_domain_vpc_offerings.py
all_test_dynamicroles Skipped --- test_dynamicroles.py
all_test_enable_account_settings_for_domain Skipped --- test_enable_account_settings_for_domain.py
all_test_enable_role_based_users_in_projects Skipped --- test_enable_role_based_users_in_projects.py
all_test_events_resource Skipped --- test_events_resource.py
all_test_extension_custom_action_lifecycle Skipped --- test_extension_custom_action_lifecycle.py
all_test_extension_custom Skipped --- test_extension_custom.py
all_test_extension_lifecycle Skipped --- test_extension_lifecycle.py
all_test_gateway_on_shared_networks Skipped --- test_gateway_on_shared_networks.py
all_test_global_acls Skipped --- test_global_acls.py
all_test_global_settings Skipped --- test_global_settings.py
all_test_guest_os Skipped --- test_guest_os.py
all_test_guest_vlan_range Skipped --- test_guest_vlan_range.py
all_test_host_control_state Skipped --- test_host_control_state.py
all_test_hostha_simulator Skipped --- test_hostha_simulator.py
all_test_host_ping Skipped --- test_host_ping.py
all_test_host_tags Skipped --- test_host_tags.py
all_test_human_readable_logs Skipped --- test_human_readable_logs.py
all_test_image_store_object_migration Skipped --- test_image_store_object_migration.py
all_test_import_unmanage_volumes Skipped --- test_import_unmanage_volumes.py
all_test_internal_lb Skipped --- test_internal_lb.py
all_test_ipv4_routing Skipped --- test_ipv4_routing.py
all_test_ipv6_infra Skipped --- test_ipv6_infra.py
all_test_iso Skipped --- test_iso.py
all_test_kms_lifecycle Skipped --- test_kms_lifecycle.py
all_test_kubernetes_clusters Skipped --- test_kubernetes_clusters.py
all_test_kubernetes_supported_versions Skipped --- test_kubernetes_supported_versions.py
all_test_list_accounts Skipped --- test_list_accounts.py
all_test_list_disk_offerings Skipped --- test_list_disk_offerings.py
all_test_list_domains Skipped --- test_list_domains.py
all_test_list_hosts Skipped --- test_list_hosts.py
all_test_list_ids_parameter Skipped --- test_list_ids_parameter.py
all_test_list_service_offerings Skipped --- test_list_service_offerings.py
all_test_list_storage_pools Skipped --- test_list_storage_pools.py
all_test_list_volumes Skipped --- test_list_volumes.py
all_test_loadbalance Skipped --- test_loadbalance.py
all_test_login Skipped --- test_login.py
all_test_metrics_api Skipped --- test_metrics_api.py
all_test_migration Skipped --- test_migration.py
all_test_ms_maintenance_and_safe_shutdown Skipped --- test_ms_maintenance_and_safe_shutdown.py
all_test_multipleips_per_nic Skipped --- test_multipleips_per_nic.py
all_test_nested_virtualization Skipped --- test_nested_virtualization.py
all_test_network_acl Skipped --- test_network_acl.py
all_test_network_extension_namespace Skipped --- test_network_extension_namespace.py
all_test_network_ipv6 Skipped --- test_network_ipv6.py
all_test_network_permissions Skipped --- test_network_permissions.py
all_test_network Skipped --- test_network.py
all_test_network_traffic_type_api Skipped --- test_network_traffic_type_api.py
all_test_nic_adapter_type Skipped --- test_nic_adapter_type.py
all_test_nic Skipped --- test_nic.py
all_test_non_contigiousvlan Skipped --- test_non_contigiousvlan.py
all_test_nonstrict_affinity_group Skipped --- test_nonstrict_affinity_group.py
all_test_object_stores Skipped --- test_object_stores.py
all_test_outofbandmanagement_nestedplugin Skipped --- test_outofbandmanagement_nestedplugin.py
all_test_outofbandmanagement Skipped --- test_outofbandmanagement.py
all_test_over_provisioning Skipped --- test_over_provisioning.py
all_test_password_server Skipped --- test_password_server.py
all_test_persistent_network Skipped --- test_persistent_network.py
all_test_portable_publicip Skipped --- test_portable_publicip.py
all_test_portforwardingrules Skipped --- test_portforwardingrules.py
all_test_primary_storage Skipped --- test_primary_storage.py
all_test_primary_storage_scope Skipped --- test_primary_storage_scope.py
all_test_privategw_acl_ovs_gre Skipped --- test_privategw_acl_ovs_gre.py
all_test_privategw_acl Skipped --- test_privategw_acl.py
all_test_private_roles Skipped --- test_private_roles.py
all_test_projects Skipped --- test_projects.py
all_test_public_ip_range Skipped --- test_public_ip_range.py
all_test_purge_expunged_vms Skipped --- test_purge_expunged_vms.py
all_test_pvlan Skipped --- test_pvlan.py
all_test_quarantined_ips Skipped --- test_quarantined_ips.py
all_test_regions Skipped --- test_regions.py
all_test_register_userdata Skipped --- test_register_userdata.py
all_test_reset_configuration_settings Skipped --- test_reset_configuration_settings.py
all_test_reset_vm_on_reboot Skipped --- test_reset_vm_on_reboot.py
all_test_resource_accounting Skipped --- test_resource_accounting.py
all_test_resource_detail Skipped --- test_resource_detail.py
all_test_resource_names Skipped --- test_resource_names.py
all_test_restore_vm Skipped --- test_restore_vm.py
all_test_router_dhcphosts Skipped --- test_router_dhcphosts.py
all_test_router_dns Skipped --- test_router_dns.py
all_test_router_dnsservice Skipped --- test_router_dnsservice.py
all_test_routers_iptables_default_policy Skipped --- test_routers_iptables_default_policy.py
all_test_routers_network_ops Skipped --- test_routers_network_ops.py
all_test_routers Skipped --- test_routers.py
all_test_scale_vm Skipped --- test_scale_vm.py
all_test_secondary_storage Skipped --- test_secondary_storage.py
all_test_service_offerings Skipped --- test_service_offerings.py
all_test_set_sourcenat Skipped --- test_set_sourcenat.py
all_test_sharedfs_lifecycle Skipped --- test_sharedfs_lifecycle.py
all_test_snapshots Skipped --- test_snapshots.py
all_test_ssl_offloading Skipped --- test_ssl_offloading.py
all_test_ssvm Skipped --- test_ssvm.py
all_test_staticroles Skipped --- test_staticroles.py
all_test_storage_policy Skipped --- test_storage_policy.py
all_test_systemvm_userdata Skipped --- test_systemvm_userdata.py
all_test_templates Skipped --- test_templates.py
all_test_update_security_group Skipped --- test_update_security_group.py
all_test_usage_events Skipped --- test_usage_events.py
all_test_usage Skipped --- test_usage.py
all_test_vm_autoscaling Skipped --- test_vm_autoscaling.py
all_test_vm_deployment_planner Skipped --- test_vm_deployment_planner.py
all_test_vm_life_cycle Skipped --- test_vm_life_cycle.py
all_test_vm_lifecycle_unmanage_import Skipped --- test_vm_lifecycle_unmanage_import.py
all_test_vm_lifecycle_unmanage_kvm_import Skipped --- test_vm_lifecycle_unmanage_kvm_import.py
all_test_vm_lifecycle_with_snapshot_or_volume Skipped --- test_vm_lifecycle_with_snapshot_or_volume.py
all_test_vm_schedule Skipped --- test_vm_schedule.py
all_test_vm_snapshot_kvm Skipped --- test_vm_snapshot_kvm.py
all_test_vm_snapshots Skipped --- test_vm_snapshots.py
all_test_vm_strict_host_tags Skipped --- test_vm_strict_host_tags.py
all_test_vnf_templates Skipped --- test_vnf_templates.py
all_test_volumes Skipped --- test_volumes.py
all_test_vpc_conserve_mode Skipped --- test_vpc_conserve_mode.py
all_test_vpc_firewall_rules Skipped --- test_vpc_firewall_rules.py
all_test_vpc_ipv6 Skipped --- test_vpc_ipv6.py
all_test_vpc_redundant Skipped --- test_vpc_redundant.py
all_test_vpc_router_nics Skipped --- test_vpc_router_nics.py
all_test_vpc_vpn Skipped --- test_vpc_vpn.py
all_test_webhook_delivery Skipped --- test_webhook_delivery.py
all_test_webhook_lifecycle Skipped --- test_webhook_lifecycle.py
all_test_host_maintenance Skipped --- test_host_maintenance.py
all_test_hostha_kvm Skipped --- test_hostha_kvm.py

@weizhouapache

Copy link
Copy Markdown
Member

@blueorangutan package

1 similar comment
@weizhouapache

Copy link
Copy Markdown
Member

@blueorangutan package

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan

Copy link
Copy Markdown

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 19100

@weizhouapache

Copy link
Copy Markdown
Member

@blueorangutan test matrix

@blueorangutan

Copy link
Copy Markdown

@weizhouapache a [SL] Trillian-Jenkins matrix job (ol8 mgmt + kvm-ol8, ubuntu22 mgmt + kvm-ubuntu22, ol8 mgmt + vmware-70u3, ol9 mgmt + xcpng82) has been kicked to run smoke tests

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment