ShipIt

  •  
  •  
  • Category:

PerlモジュールのCPANへのアップロードはShipItというのが良いらしいので使ってみたのだが、ちょいちょい詰まりどころがあったのでメモ

ShipItのインストールにはcpanminusを使用します。
cpanminusのインストール等はここでは書きません。

ShipItのインストール

$ cpanm ShipIt

ShipItの準備

設定ファイルの作成

設定ファイル.shipitをプロジェクトディレクトリの直下に作成します。
0から書いても良いですが、コマンドで自動生成できます。

$ shipit --write-config

これで以下のようなファイルが生成されます。

# auto-generated shipit config file.
steps = FindVersion, ChangeVersion, CheckChangeLog, DistTest, Commit, Tag, MakeDist
# svn.tagpattern = MyProj-%v
# svn.tagpattern = http://code.example.com/svn/tags/MyProj-%v
# CheckChangeLog.files = ChangeLog, MyProj.CHANGES

stepsがshipitで実行する処理の内容です。左から順番に実行されます。
CPANにアップロードする際は UploadCPAN というステップを書き足します。

ちなみに私の設定は以下です。

steps = FindVersion, ChangeVersion, Commit, Tag, MakeDist, UploadCPAN
git.push_to = origin

それぞれのステップの意味は以下のような感じです。

  • FindVersion: 現在のバージョンを取得、リリースを行うバージョンをユーザーの入力から設定します
  • ChangeVersion: ソースコード内に記載されたバージョンを変更します
  • Commit: 変更をコミットしてGithubにプッシュします
  • Tag: gitのタグ付けを行いGithubにプッシュします
  • MakeDist: モジュールを作成します
  • UploadCPAN: CPANにアップロードします

ShipItの実行①

$ shipit
...
Running step ShipIt::Step::UploadCPAN=HASH(0x14dbf1a90)
Upload to CPAN? [Y/n] Y
Upload failed.

cpan-uploadのインストール

Uploadに失敗したのはアップロードするために必要なcpan-uploadコマンドが入っていないからです。
cpan-uploadは以下でインストールします。
古い記事では"cpan-upload-http"や"App::cpanupload"などをインストールすると書いてあったりしますが、時代は流れ現在は以下のモジュールをインストールするのが良さそうです。

$ cpanm CPAN::Uploader

ShipItの実行②

$ shipit
...
Upload to CPAN? [Y/n] Y
Please provide a value for --user
Upload failed.

PAUSEの設定

これはCPANアップロード先のPAUSEアカウントの設定がされてないからです。
以下の設定を~/.pauseとして保存します。

user <username>
password <password>

ShipItの実行③

$ shipit
...
Upload to CPAN? [Y/n] Y
registering upload with PAUSE web server
POSTing upload for /Users/gucchi/shipit-dist/Devel-PatchPerl-Plugin-Darwin-v0.1.2.tar.gz to https://pause.perl.org/pause/authenquery?ACTION=add_uri
request failed with error code 500
  Message: Can't verify SSL peers without knowing which Certificate Authorities to trust
Upload failed.

Mozilla::CAのインストール

これは信頼できるCAを見つけられなくて失敗したということです。
MacではCAはキーチェーンで管理されていますがPerlからは読み込めてないという感じですね。

これはMozilla::CAをのインストールで解決するようです。

$ cpanm Mozilla::CA

ShipItの実行④

$ shipit
...
Upload to CPAN? [Y/n] Y
registering upload with PAUSE web server
POSTing upload for ...
PAUSE add message sent ok [200]

成功です!

ありがとうございました!

コメントする