はじめに
Rumaleに改名する際に以下のページをまずみた。Googleで「gem rename」で上位に来たので。
ざっと読んで、旧名のGemのリポジトリとかREADMEとかに説明をつけて、新しいの出せば良いんだな〜と思った。FactoryBot(旧FactoryGirl)はなんかGithubのリポジトリも引き継いでる感じだけど、なんか特殊な方法をやってるのだろうな〜と思った。 だが、実際は特殊な方法ではなくて、GithubとRubyGemsがいい感じにやってくれるというコトを教わった。またまた、id:mrkn さんにお世話になりつつ作業をすすめた 🙏 改めて感謝申し上げます 🙏
SVMKitからRumaleへ
Githubでは、リポジトリ名はSettingsでRenameできる。改名前のURLでアクセスしたとしても、Githubがいい感じにリダイレクトしてくれる。新しい名前のリポジトリを用意するのに比べて、Starとかのステータスが維持されるのが良い。
Gitコマンドレベルの作業では次のようにした。手元にSVMKitとRumaleの作業コピーがあるとする。Rumaleの内容でSVMKitを上書きするかたちになる。
$ cd svmkit $ git rm -rf --ignore-unmatch * $ cp -pr ../rumale/* . $ cp ../rumale/.{.coveralls.yml,.gitignore,.rspec*,.rubocop*,.travis.yml} . $ git add . $ git commit -m ':rocket: Rename to Rumale'
置き換えたのは version 0.8.0 なので、v0.8.0のタグを付け替えてpushしようと思ったが、なにか手違いがあったみたいで、tagがforceな感じで置き換えれなかった。というわけで、まず普通にpushした。
$ git push origin master
これでSVMKitの中身がRumaleのものになる。 次に、Github上でrumaleリポジトリを削除して、svmkiitリポジトリをrumaleにRenameした。 このとき、Githubで「rumaleはすでにあります」みたいなエラーが出たり、アクセスしたら前のモノが残ってるなど、変なコトは起きなかった。意図通りの変更ができた。
そして、pendingしてたタグ付けだが、以下の準備をしておいて、
$ cd ../ $ mv rumale rumale.old $ git clone https://github.com/yoshoku/rumale.git $ cd rumale $ git tag -a v0.8.0 -m 'Version 0.8.0' 最新のコミット
そしてGithub上で v0.8.0 のタグを削除して、速攻pushした。我ながらヤベーヤツだ。
$ git push origin v0.8.0
これでGithub上でSVMKitがRumaleになった。RubyGemsのRumaleのページに行くと、SVMKitをRumaleに改名したものが紐付いていた。
SVMKitの後始末
SVMKitをRumaleと置き換えるだけで、SVMKitのコードはそのまま動く。なので、実質 SVMKit = Rumale という定数定義だけのRumaleに依存する空Gemを作って、それをSVMKitのversion 0.8.1としてリリースした。
$ bundle gem svmkit $ cd svmkit
旧SVMKitからlibやspecディレクトリ以外のものをコピーしてきた。svmkit.gemspecファイルは以下のようにした。versionを直打ちにして、rumaleに依存させる。
lib = File.expand_path('lib', __dir__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) Gem::Specification.new do |spec| spec.name = 'svmkit' spec.version = '0.8.1' ... 略 spec.add_runtime_dependency 'rumale', '~> 0.8' ... 略
その上でsvmkit/version.rbを削除した。
$ cd lib $ rm -rf svmkit
そして、svmkit.rbを次のようにした。
warn 'SVMKit has been deprecated; You should migrate to Rumale.' require 'rumale' SVMKit = Rumale
これで、gemファイルを作り、RubyGemsに上げる。Githubにpushされたりすると困るといういか、リポジトリがないので、rake releaseではなく、gem pushを使った。
$ rake build svmkit 0.8.1 built to pkg/svmkit-0.8.1.gem. $ gem push pkg/svmkit-0.8.1.gem Pushing gem to https://rubygems.org... Successfully registered gem: svmkit (0.8.1)
追記:
念のため、version 0.8.0はyankした...
$ gem yank svmkit -v0.8.0 Yanking gem from https://rubygems.org... Successfully deleted gem: svmkit (0.8.0)
Travis CIやCoveralls
Travis CIはSettingsページにある、Sync accountを押して、ページをリロードすると、svmkitが消えていた。 Coverallsは、SVMKitのSettingsページに行き、DELETE REPOSITORYした。そして、RumaleのSettingsページで、Resync with githubした。 画面を見た感じ上手く切り替えれたっぽい。
追記:
結局、RumaleもDELETE REPOSITORYして、ADD REPOSページでSYNC REPOSボタンを押したあとで、改めてRumaleのリポジトリを追加した。そのうえでTravis CIでRebuildした。
おわりに
やってしまいました...気をつけたいと思います...