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]
成功です!
ありがとうございました!
コメントする