洋食の日記

「た・である」調ではなく「です・ます」調で書きはじめれば良かったなと後悔してる人のブログです

Rumaleに改名するときにやらかしたコト

はじめに

Rumaleに改名する際に以下のページをまずみた。Googleで「gem rename」で上位に来たので。

stackoverflow.com

ざっと読んで、旧名のGemのリポジトリとかREADMEとかに説明をつけて、新しいの出せば良いんだな〜と思った。FactoryBot(旧FactoryGirl)はなんかGithubリポジトリも引き継いでる感じだけど、なんか特殊な方法をやってるのだろうな〜と思った。 だが、実際は特殊な方法ではなくて、GithubRubyGemsがいい感じにやってくれるというコトを教わった。またまた、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した。

おわりに

やってしまいました...気をつけたいと思います...