Add sort scope to semantic version concern
What does this MR do and why?
Adds two scopes to SemanticVersionable
to sort by semantic version ascending or descending.
Screenshots or screen recordings
The following releases for a catalog resource were created in this order: 3.0.1
, 4.0.1
, 5.0.1
, 3.1.2
, 4.1.6
Timestamps and creation order:
[#<Ci::Catalog::Resources::Version:0x0000000167879f98
id: 24,
release_id: 55,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:27.026547000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:27.013120000 UTC +00:00,
semver_major: 3,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff38ac0
id: 25,
release_id: 56,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:34.474368000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:34.458959000 UTC +00:00,
semver_major: 4,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff38a20
id: 26,
release_id: 57,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:47.170977000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:47.162068000 UTC +00:00,
semver_major: 5,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff38980
id: 27,
release_id: 58,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:45:03.764354000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:45:03.756205000 UTC +00:00,
semver_major: 3,
semver_minor: 1,
semver_patch: 2,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff388e0
id: 28,
release_id: 59,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:45:33.038902000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:45:33.028747000 UTC +00:00,
semver_major: 4,
semver_minor: 1,
semver_patch: 6,
semver_prerelease: nil>]
When using project.catalog_resource.versions.order_by_semantic_version_asc
, the results are: 3.0.1
, 3.1.2
, 4.0.1
, 4.1.6
, 5.0.1
Ordered by semantic version ascending
[#<Ci::Catalog::Resources::Version:0x000000016ff9f018
id: 24,
release_id: 55,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:27.026547000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:27.013120000 UTC +00:00,
semver_major: 3,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff9ef78
id: 27,
release_id: 58,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:45:03.764354000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:45:03.756205000 UTC +00:00,
semver_major: 3,
semver_minor: 1,
semver_patch: 2,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff9eed8
id: 25,
release_id: 56,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:34.474368000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:34.458959000 UTC +00:00,
semver_major: 4,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff9ee38
id: 28,
release_id: 59,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:45:33.038902000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:45:33.028747000 UTC +00:00,
semver_major: 4,
semver_minor: 1,
semver_patch: 6,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff9ed98
id: 26,
release_id: 57,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:47.170977000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:47.162068000 UTC +00:00,
semver_major: 5,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>]
When using project.catalog_resource.versions.order_by_semantic_version_desc
, the results are: 5.0.1
, 4.1.6
,4.0.1
, 3.1.2
, ,3.0.1
Ordered by semantic version descending
[#<Ci::Catalog::Resources::Version:0x000000016ff95518
id: 26,
release_id: 57,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:47.170977000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:47.162068000 UTC +00:00,
semver_major: 5,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff95478
id: 28,
release_id: 59,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:45:33.038902000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:45:33.028747000 UTC +00:00,
semver_major: 4,
semver_minor: 1,
semver_patch: 6,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff953d8
id: 25,
release_id: 56,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:34.474368000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:34.458959000 UTC +00:00,
semver_major: 4,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff95338
id: 27,
release_id: 58,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:45:03.764354000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:45:03.756205000 UTC +00:00,
semver_major: 3,
semver_minor: 1,
semver_patch: 2,
semver_prerelease: nil>,
#<Ci::Catalog::Resources::Version:0x000000016ff95298
id: 24,
release_id: 55,
catalog_resource_id: 15,
project_id: 38,
created_at: Wed, 07 Feb 2024 14:44:27.026547000 UTC +00:00,
released_at: Wed, 07 Feb 2024 14:44:27.013120000 UTC +00:00,
semver_major: 3,
semver_minor: 0,
semver_patch: 1,
semver_prerelease: nil>]
How to set up and validate locally
This can only be validated by adding the concern to an existing model and sorting. You can see an implementation of this here: !144052 (diffs), which is using the sorting.
Edited by Laura Montemayor