From ecf4bdba2a6974faf3587a11e66f9c3ca9e7ba79 Mon Sep 17 00:00:00 2001 From: Akshay Gupta Date: Sat, 2 Dec 2023 01:39:29 +0530 Subject: [PATCH] Revert "add support for multiple versioning strategies" This reverts commit 654dd48f59d32265175afa12337d5dd3e1f7bec6. --- app/controllers/trains_controller.rb | 1 - app/libs/versioning_strategies/semverish.rb | 35 +--- app/models/concerns/versionable.rb | 2 +- app/models/release.rb | 1 - app/models/release_platform_run.rb | 5 +- app/models/train.rb | 9 +- app/refinements/refined_string.rb | 4 +- app/views/trains/_form.html.erb | 8 +- .../trains/_versioning_strategy.html.erb | 10 - ...191245_add_versioning_strategy_to_train.rb | 5 - db/schema.rb | 3 +- .../versioning_strategies/semverish_spec.rb | 177 ++++++------------ 12 files changed, 77 insertions(+), 183 deletions(-) delete mode 100644 app/views/trains/_versioning_strategy.html.erb delete mode 100644 db/migrate/20231201191245_add_versioning_strategy_to_train.rb diff --git a/app/controllers/trains_controller.rb b/app/controllers/trains_controller.rb index 3c4258f87..5130aabe1 100644 --- a/app/controllers/trains_controller.rb +++ b/app/controllers/trains_controller.rb @@ -97,7 +97,6 @@ def train_params :minor_version_seed, :patch_version_seed, :branching_strategy, - :versioning_strategy, :release_backmerge_branch, :release_branch, :kickoff_at, diff --git a/app/libs/versioning_strategies/semverish.rb b/app/libs/versioning_strategies/semverish.rb index 39228adaa..f13e7ac7e 100644 --- a/app/libs/versioning_strategies/semverish.rb +++ b/app/libs/versioning_strategies/semverish.rb @@ -3,34 +3,15 @@ class VersioningStrategies::Semverish TEMPLATES = { "Positive Number" => :pn, - "Calendar Year And Next Week" => :yy0w1 + "Current Year" => :yyyy } INCREMENTS = { TEMPLATES["Positive Number"] => proc { |v| (!v.nil?) ? v.abs + 1 : nil }, - TEMPLATES["Calendar Year And Next Week"] => proc { |_v| - now = Time.current - Integer("#{now.year.to_s[2..3]}#{now.strftime("%U").to_i + 1}") - } + TEMPLATES["Current Year"] => proc { |_v| Time.current.year } } - STRATEGIES = { - semver: { - major: TEMPLATES["Positive Number"], - minor: TEMPLATES["Positive Number"], - patch: TEMPLATES["Positive Number"], - update_minor_on_major_bump: false - }, - - year_and_next_week: { - major: TEMPLATES["Positive Number"], - minor: TEMPLATES["Calendar Year And Next Week"], - patch: TEMPLATES["Positive Number"], - update_minor_on_major_bump: true - } - } - - DEFAULT_STRATEGY = :semver + DEFAULT_TEMPLATE = TEMPLATES["Positive Number"] # adapted from https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string # makes the patch version optional @@ -55,16 +36,12 @@ def initialize(version_str) @version = version_str end - def bump!(term, strategy: DEFAULT_STRATEGY) + def bump!(term, template_type: DEFAULT_TEMPLATE) term = term.to_sym new_version = clone - strategy_config = STRATEGIES[strategy.to_sym] - new_value = INCREMENTS[strategy_config[term]].call(public_send(term)) + new_value = INCREMENTS[template_type].call(public_send(term)) new_version.public_send("#{term}=", new_value) - if term == :major - new_version.minor = 0 unless strategy_config[:update_minor_on_major_bump] - new_version.minor = INCREMENTS[strategy_config[:minor]].call(public_send(:minor)) if strategy_config[:update_minor_on_major_bump] - end + new_version.minor = 0 if term == :major new_version.patch = 0 if proper? && (term == :major || term == :minor) new_version end diff --git a/app/models/concerns/versionable.rb b/app/models/concerns/versionable.rb index 3c9d64217..4779f7138 100644 --- a/app/models/concerns/versionable.rb +++ b/app/models/concerns/versionable.rb @@ -12,6 +12,6 @@ def next_version(major_only: false, patch_only: false) major_only ? :major : :minor end - version_current.ver_bump(bump_term, strategy: versioning_strategy) + version_current.ver_bump(bump_term) end end diff --git a/app/models/release.rb b/app/models/release.rb index b35414cad..8ce303615 100644 --- a/app/models/release.rb +++ b/app/models/release.rb @@ -134,7 +134,6 @@ class Release < ApplicationRecord attr_accessor :has_major_bump, :force_finalize, :hotfix_platform - delegate :versioning_strategy, to: :train delegate :app, :pre_release_prs?, :vcs_provider, :release_platforms, :notify!, :continuous_backmerge?, to: :train delegate :platform, to: :app diff --git a/app/models/release_platform_run.rb b/app/models/release_platform_run.rb index 4d37ba5ff..1e6f0a679 100644 --- a/app/models/release_platform_run.rb +++ b/app/models/release_platform_run.rb @@ -75,7 +75,6 @@ class ReleasePlatformRun < ApplicationRecord scope :pending_release, -> { where.not(status: [:finished, :stopped]) } - delegate :versioning_strategy, to: :release delegate :all_commits, :original_release_version, :hotfix?, to: :release delegate :steps, :train, :app, :platform, to: :release_platform @@ -116,8 +115,8 @@ def bump_version! semverish = newest_release_version.to_semverish - self.release_version = semverish.bump!(:patch, strategy: versioning_strategy).to_s if semverish.proper? - self.release_version = semverish.bump!(:minor, strategy: versioning_strategy).to_s if semverish.partial? + self.release_version = semverish.bump!(:patch).to_s if semverish.proper? + self.release_version = semverish.bump!(:minor).to_s if semverish.partial? save! diff --git a/app/models/train.rb b/app/models/train.rb index 7927b2925..638f1aabc 100644 --- a/app/models/train.rb +++ b/app/models/train.rb @@ -33,7 +33,6 @@ # class Train < ApplicationRecord has_paper_trail - using RefinedArray using RefinedString extend FriendlyId include Rails.application.routes.url_helpers @@ -67,9 +66,13 @@ class Train < ApplicationRecord delegate :ready?, :config, to: :app delegate :vcs_provider, :ci_cd_provider, :notification_provider, :monitoring_provider, to: :integrations - enum status: {draft: "draft", active: "active", inactive: "inactive"} + enum status: { + draft: "draft", + active: "active", + inactive: "inactive" + } + enum backmerge_strategy: {continuous: "continuous", on_finalize: "on_finalize"} - enum versioning_strategy: {semver: "Semver", year_and_next_week: "Year and Next Week"} friendly_id :name, use: :slugged auto_strip_attributes :name, squish: true diff --git a/app/refinements/refined_string.rb b/app/refinements/refined_string.rb index 2fb85d73d..109592e0d 100644 --- a/app/refinements/refined_string.rb +++ b/app/refinements/refined_string.rb @@ -55,8 +55,8 @@ def to_semverish VersioningStrategies::Semverish.new(to_s) end - def ver_bump(term, strategy:) - to_semverish.bump!(term, strategy:).to_s + def ver_bump(term) + to_semverish.bump!(term).to_s end def better_titleize diff --git a/app/views/trains/_form.html.erb b/app/views/trains/_form.html.erb index b823b96e0..09364ae66 100644 --- a/app/views/trains/_form.html.erb +++ b/app/views/trains/_form.html.erb @@ -118,7 +118,7 @@ <%= render partial: "notifications_config_form", locals: { form: } %> <% end %> -
Branching Strategy
+
Branching Strategy
@@ -163,10 +163,6 @@ to learn more about our supported branching strategies.
<% end %> - - <%= if current_organization.fixed_build_number? %> - <%= render partial: "trains/versioning_strategy", locals: { form:, train: } %> - <% end %>
@@ -182,6 +178,8 @@ <%= render partial: "store_tags_form", locals: { form: } %> <% end %>
+ +
diff --git a/app/views/trains/_versioning_strategy.html.erb b/app/views/trains/_versioning_strategy.html.erb deleted file mode 100644 index b412024a4..000000000 --- a/app/views/trains/_versioning_strategy.html.erb +++ /dev/null @@ -1,10 +0,0 @@ -
Versioning Strategy
- -
- <%= form.label "Strategy", class: "block text-sm font-medium mb-1" %> - <%= form.select :versioning_strategy, - options_for_select(Train.versioning_strategies.invert, train.versioning_strategy), - { required: true, }, - { class: text_field_classes(is_disabled: train.persisted?), - disabled: train.persisted? } %> -
diff --git a/db/migrate/20231201191245_add_versioning_strategy_to_train.rb b/db/migrate/20231201191245_add_versioning_strategy_to_train.rb deleted file mode 100644 index 9659d0fd9..000000000 --- a/db/migrate/20231201191245_add_versioning_strategy_to_train.rb +++ /dev/null @@ -1,5 +0,0 @@ -class AddVersioningStrategyToTrain < ActiveRecord::Migration[7.0] - def change - add_column :trains, :versioning_strategy, :string, default: "semver" - end -end diff --git a/db/schema.rb b/db/schema.rb index 72029aeb1..be66070f8 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema[7.0].define(version: 2023_12_01_191245) do +ActiveRecord::Schema[7.0].define(version: 2023_11_24_134628) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" enable_extension "pgcrypto" @@ -583,7 +583,6 @@ t.boolean "compact_build_notes", default: false t.boolean "tag_releases", default: true t.string "tag_suffix" - t.string "versioning_strategy", default: "semver" t.index ["app_id"], name: "index_trains_on_app_id" end diff --git a/spec/libs/versioning_strategies/semverish_spec.rb b/spec/libs/versioning_strategies/semverish_spec.rb index 696fde889..1d0449290 100644 --- a/spec/libs/versioning_strategies/semverish_spec.rb +++ b/spec/libs/versioning_strategies/semverish_spec.rb @@ -23,148 +23,83 @@ end describe "comparisons" do - context "when semver" do - it "compares using > or <" do - v1 = described_class.new("1.2.1") - v2 = described_class.new("1.2.0") - v3 = described_class.new("1.2.0") - - expect(v1 > v2).to be(true) - expect(v1 < v2).to be(false) - expect(v2 <= v3).to be(true) - expect(v3 >= v2).to be(true) - end + let(:partial_semverish) { described_class.new("1.2") } + let(:semverish) { described_class.new("1.2.1") } + + it "compares using > or <" do + v1 = described_class.new("1.2.1") + v2 = described_class.new("1.2.0") + v3 = described_class.new("1.2.0") + + expect(v1 > v2).to be(true) + expect(v1 < v2).to be(false) + expect(v2 <= v3).to be(true) + expect(v3 >= v2).to be(true) + end - it "compares using ==" do - v1 = described_class.new("1.2.1") - v2 = described_class.new("1.2.1") - v3 = described_class.new("1.2.2") + it "compares using ==" do + v1 = described_class.new("1.2.1") + v2 = described_class.new("1.2.1") + v3 = described_class.new("1.2.2") - expect(v1 == v2).to be(true) - expect(v2 != v3).to be(true) - expect(v1 == v3).to be(false) - end + expect(v1 == v2).to be(true) + expect(v2 != v3).to be(true) + expect(v1 == v3).to be(false) + end - it "does not compare a partial and a proper semver" do - bigger = described_class.new("1.2.1") - smaller = described_class.new("1.2") + it "does not compare a partial and a proper semver" do + bigger = described_class.new("1.2.1") + smaller = described_class.new("1.2") - expect { bigger > smaller }.to raise_error(ArgumentError) - end + expect { bigger > smaller }.to raise_error(ArgumentError) + end - it "determines sort order" do - v1 = described_class.new("1.2.1") - v2 = described_class.new("1.2.3") - v3 = described_class.new("1.1.3") - v4 = described_class.new("2.1.3") + it "determines sort order" do + v1 = described_class.new("1.2.1") + v2 = described_class.new("1.2.3") + v3 = described_class.new("1.1.3") + v4 = described_class.new("2.1.3") - pv1 = described_class.new("2.1") - pv2 = described_class.new("2.1") - pv3 = described_class.new("1.2") - pv4 = described_class.new("1.3") - pv5 = described_class.new("0.1") + pv1 = described_class.new("2.1") + pv2 = described_class.new("2.1") + pv3 = described_class.new("1.2") + pv4 = described_class.new("1.3") + pv5 = described_class.new("0.1") - expect([v1, v2, v3, v4].sort).to eq([v3, v1, v2, v4]) - expect([pv1, pv2, pv3, pv4, pv5].sort).to eq([pv5, pv3, pv4, pv1, pv2]) - end + expect([v1, v2, v3, v4].sort).to eq([v3, v1, v2, v4]) + expect([pv1, pv2, pv3, pv4, pv5].sort).to eq([pv5, pv3, pv4, pv1, pv2]) end + end - context "when calendar (year_and_next_week) version" do - it "compares using > or <" do - v1 = described_class.new("1.2452.1") - v2 = described_class.new("1.2452.0") - v3 = described_class.new("1.2452.0") + describe "#bump!" do + let(:partial_semverish) { described_class.new("1.2") } + let(:semverish) { described_class.new("1.2.1") } - expect(v1 > v2).to be(true) - expect(v1 < v2).to be(false) - expect(v2 <= v3).to be(true) - expect(v3 >= v2).to be(true) + context "when semverish based on positive numbers" do + it "bumps up major" do + expect(semverish.bump!(:major, template_type: :pn).to_s).to eq("2.0.0") end - it "compares using ==" do - v1 = described_class.new("0.2452.1") - v2 = described_class.new("0.2452.1") - v3 = described_class.new("1.2452.1") - - expect(v1 == v2).to be(true) - expect(v2 != v3).to be(true) - expect(v1 == v3).to be(false) + it "bumps up minor" do + expect(semverish.bump!(:minor, template_type: :pn).to_s).to eq("1.3.0") end - it "does not compare a partial and a proper semver" do - bigger = described_class.new("0.2452.1") - smaller = described_class.new("0.2452") - - expect { bigger > smaller }.to raise_error(ArgumentError) - end - - it "determines sort order" do - v1 = described_class.new("0.2452.2") - v2 = described_class.new("1.2452.0") - v3 = described_class.new("0.2252.1") - v4 = described_class.new("0.2552.1") - - pv1 = described_class.new("0.2452") - pv2 = described_class.new("0.2452") - pv3 = described_class.new("0.2202") - pv4 = described_class.new("0.2203") - pv5 = described_class.new("0.2201") - - expect([v1, v2, v3, v4].sort).to eq([v3, v1, v4, v2]) - expect([pv1, pv2, pv3, pv4, pv5].sort).to eq([pv5, pv3, pv4, pv1, pv2]) + it "bumps up patch" do + expect(semverish.bump!(:patch, template_type: :pn).to_s).to eq("1.2.2") end end - end - describe "#bump!" do - context "when semver" do - let(:partial_semverish) { described_class.new("1.2") } - let(:semverish) { described_class.new("1.2.1") } - - context "when semverish based on positive numbers" do - it "bumps up major" do - expect(semverish.bump!(:major, strategy: :semver).to_s).to eq("2.0.0") - end - - it "bumps up minor" do - expect(semverish.bump!(:minor, strategy: :semver).to_s).to eq("1.3.0") - end - - it "bumps up patch" do - expect(semverish.bump!(:patch, strategy: :semver).to_s).to eq("1.2.2") - end + context "with partial semverish based on positive numbers" do + it "bumps up major" do + expect(partial_semverish.bump!(:major, template_type: :pn).to_s).to eq("2.0") end - context "with partial semverish based on positive numbers" do - it "bumps up major" do - expect(partial_semverish.bump!(:major, strategy: :semver).to_s).to eq("2.0") - end - - it "bumps up minor" do - expect(partial_semverish.bump!(:minor, strategy: :semver).to_s).to eq("1.3") - end - - it "does not do anything if patch" do - expect(partial_semverish.bump!(:patch, strategy: :semver).to_s).to eq("1.2") - end + it "bumps up minor" do + expect(partial_semverish.bump!(:minor, template_type: :pn).to_s).to eq("1.3") end - end - - context "when calendar (year_and_next_week) version" do - let(:year_and_next_week) { described_class.new("0.2347.0") } - - context "with current year and week semverish based on positive numbers" do - it "bumps up major and keeps minor intact" do - expect(year_and_next_week.bump!(:major, strategy: :year_and_next_week).to_s).to eq("1.2349.0") - end - - it "bumps up minor" do - expect(year_and_next_week.bump!(:minor, strategy: :year_and_next_week).to_s).to eq("0.2349.0") - end - it "does not do anything if patch" do - expect(year_and_next_week.bump!(:patch, strategy: :year_and_next_week).to_s).to eq("0.2347.1") - end + it "does not do anything if patch" do + expect(partial_semverish.bump!(:patch, template_type: :pn).to_s).to eq("1.2") end end end