このブログはビルドした後に、Travis CIで LinkChecker というツールを使ってリンク切れ等が無いかチェックしています。
Travis CIでは当然毎回Linkcheckerをインストールしてるわけですが、 最近のビルドからエラーが出てチェック出来なくなっていたので 取り敢えずの処置を入れました。
Linchecker
LinkChecker は指定ページや指定サイトにあるリンクを一つ一つチェックして、 リンク切れなどをチェックしてくれるツールです。
このブログは、BitBucketにあるソースをアップデートすると werckerを使ってOctopressなビルドを行って GitHubに出来上がったものを送ってGitHub Pagesで公開していますが、 GitHubのレポジトリに送られると今度はTravis CIでLinkcheckerを走らせて、 リンクチェックをするようにしています。
BitBucketでソースを管理しているのはBitBucketだとプライベートレポジトリが無料で使えるからです。 公開前のドラフトなどは余り見える所に置きたくないので。 Travis CIではプライベートレポジトリで走らせるのは有料になるのでビルドはwerckerにしています。
その後、最後にLinkcheckerはwerckerでも良いのですが、 以前からTravis CIを使ってたのと、失敗したりFixしたりした時の メールの送信設定が多少Travis CIのが賢いのでこんな形になっています。
Linkcheckerの問題
依存モジュールのバージョンチェックに失敗する
LinkcheckerはPython製のプログラムでpip
でインストール出来るのですが、
インストール時にrequests
モジュールを要求してインストールされて無ければインストールします。
インストール後、実際走らせてみると
$ linkchecker
This program requires Python requests 2.2.0 or later.
みたいなエラーが出るときがあります。
requests
のインストールに失敗したかな、と思って見てみると
$ pip list 2>/dev/null |grep requests
requests (2.12.4)
requests-cache (0.4.11)
こんな感じでversion 2.12.4がちゃんとインストールされています。2.2.0より新しいバージョン。
なんですが、実はLinkcheckerの中で、バージョンをチェックする時に
バージョンを文字列として比較しているので、
"2.3.0" > "2.2.0"
なのですが、"2.12.0" < "2.2.0"
なので(全体の文字列で比較するので3文字目の1
と2
を比較してるので)
上のバージョンだと要求を満たしてないとみなされてしまいます。
ちょっとあれな実装ですが、勿論簡単に解決出来て、 各段階毎に分けてチェックすれば良いわけで(というか普通そうするわけで)、 大分前にレポジトリのコードは直されています。
インストール時にドキュメントが足りなくてエラーが出る
レポジトリ上では直されているので、レポジトリにあるものを直接取ってきて ビルドしてインストールしてみました。
すると、
$ python setup.py install
...
creating build/bdist.macosx-10.12-x86_64/egg/share/linkchecker
copying config/linkcheckerrc -> build/bdist.macosx-10.12-x86_64/egg/share/linkchecker
error: can't copy 'doc/html/lccollection.qhc': doesn't exist or not a regular file
こんな感じのエラーで止まってしまいます。 実際にdocディレクトリにhtmlというディレクトリは無いし、 このファイルを生成するようなコマンドも無いように見えるんですが。
error: can’t copy ‘doc/html/lccollection.qhc’ on OSX · Issue #272 · wummel/linkchecker
この辺見ても該当するmakeのコマンドもMakefileの中に無いし 作成できません。
fix Travis tests (#681) by PetrDlouhy · Pull Request #694 · wummel/linkchecker
みたいなPull Requestもありましたが、
Travis CIの設定: https://github.com/wummel/linkchecker/blob/master/.travis.ymlを見るとそもそもinstall等のチェックはしてないので
これとはまた別の話な模様。
ということで、取り敢えずドキュメントら辺だけの問題っぽいので、 setup.pyの中で該当の部分を削除した所、取り敢えず自前でビルド&インストールは 出来る様になりました。
$ git clone https://github.com/rcmdnk/linkchecker
$ cd linkchecker
$ pip install -r requirements.txt
$ python setup.py install
でインストール出来るはずです。
最後の所はroot権限が必要ならsudo
で。もしくは--prefix
オプションなどを使って
インストールできる場所の指定をしてください。
rcmdnk.github.io/.travis.yml at master · rcmdnk/rcmdnk.github.io
今使ってるのはこんな感じのTravis CI設定。
Linkcheckerの現状
バージョンチェックのコミットは昨年6月に行われてますが、 作者の人がLinkcheckerについてアクティブさを失ったのか、 PyPIへの登録やHomepage に載せてるバージョンのアップデートがまだ行われてません。
元々古いバージョンの9.3は2014年にアップされたものでそれ以降 バージョンアップデートは無いわけですが、 レポジトリの更新も昨年の6月のfixコミットで最後になっています。
で、ちょっとissueとかを見ていったらこんなエントリーが。
new organisation to welcome maintainers · Issue #686 · wummel/linkchecker
作者の人に連絡したりしてメンテナンスを皆でやっていこう、という話ですが、 どうも作者の人には連絡がついてないみたいで、このままだと別にフォークして そこでやっていこうかな、というような話に。
メンテナーの募集もしてるのでもしPythonに詳しくてLinkcheckerを使ってる人が居たら是非、と言う感じです。
上で無理やりfixしたドキュメントの所はそのままPull Requestとか出来ないですが、 その辺ちゃんと見て、直したり出来そうならその辺から初めて 出来ればLinkcheckerの手助けもしていきたいな、とも思ってます。