Написал небольшой gem, который режет большие CSV на куски по числу строк, командная строка на Thor, Ruby 3.1. Выложил 1.0.0 и радовался. Через неделю переименовал опцию --rows в --lines, выпустил 1.1.0, и у двоих знакомых, у которых в кроне стоял gem install без версии, утром упали скрипты. Сам виноват: по семантическому версионированию это ломающее изменение, и номер должен был быть 2.0.0. Gemspec сейчас такой:
require_relative "lib/csv_nareska/version"
Gem::Specification.new do |spec|
spec.name = "csv_nareska"
spec.version = CsvNareska::VERSION
spec.summary = "Режет большие CSV на части по числу строк"
spec.authors = ["kirill_spb"]
spec.license = "MIT"
spec.files = Dir["lib/**/*.rb", "exe/*", "README.md", "LICENSE.txt"]
spec.bindir = "exe"
spec.executables = ["csv_nareska"]
spec.required_ruby_version = ">= 3.0"
spec.add_dependency "thor", "~> 1.2"
end
Как вы переименовываете опции мягко, чтобы старое имя ещё пожило? И есть ли смысл выпускать 1.1.1, которая вернёт --rows?
1.1.1 с возвратом --rows имеет смысл, это как раз исправление ошибки. В Thor у опции есть aliases: option :lines, type: :numeric, aliases: "--rows", и старое имя продолжит работать. В CHANGELOG пишете, что в 2.0 его уберёте, и через пару месяцев спокойно убираете.
и в кроне всегда фиксированная версия, gem install csv_nareska -v 1.0.0. это не тебе, это знакомым передай
А CHANGELOG ведёшь? Когда я обновляю чужие gem'ы, первым делом смотрю туда. Если там написано BREAKING, хотя бы понятно, что сломается
Выпустил 1.1.1, --rows снова работает как алиас. CHANGELOG завёл, раньше не вёл, стыдно. Заодно узнал, что в gemspec есть spec.metadata["changelog_uri"], и страница gem'а на https://rubygems.org показывает эту ссылку рядом с описанием. 2.0.0 выпущу, когда наберётся ещё что-то ломающее, а пока держу обе опции.