karubabuの日記

タイトルに解決と書いているものがあるけれど、別に付いていない物は解決していないというわけではないです。つまるところ記事を書いた後に解決してちょっと嬉しかったので付けました。

travis-ciでdocker内でcpp-coverallsを使う時によくわからなくなったやつ

2つかそこらある
そもそもtravis-ciもdockerもcpp-coverallsもなんも分からんしぐーぐりんぐ係数も低すぎるのでなんも見つけられなかった
困ったところを書いておこうね

cpp-coverallsを実行するとなんやかんや正常っぽいログが出た後にTracebackを吐いて落ちる

Traceback (most recent call last):
  File "/usr/bin/coveralls", line 11, in <module>
    load_entry_point('cpp-coveralls==0.4.0', 'console_scripts', 'coveralls')()
  File "/usr/lib/python2.7/site-packages/cpp_coveralls/__init__.py", line 97, in run
    cov_report = coverage.collect(args)
  File "/usr/lib/python2.7/site-packages/cpp_coveralls/coverage.py", line 463, in collect
    report['git'] = gitrepo.gitrepo(abs_root)
  File "/usr/lib/python2.7/site-packages/cpp_coveralls/gitrepo.py", line 32, in gitrepo
    if not repo.valid():
  File "/usr/lib/python2.7/site-packages/cpp_coveralls/gitrepo.py", line 61, in valid
    return self.git("log", "-1")[0] == 0
  File "/usr/lib/python2.7/site-packages/cpp_coveralls/gitrepo.py", line 72, in git
    cwd=self.cwd)
  File "/usr/lib64/python2.7/subprocess.py", line 390, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1024, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

これはgit自体がインストールされていないのでgitを入れて
travisのログを見ているとdockerを構成する前からgit cloneでれぽじとりをクローンしているしいらんやろ!とか思っていました

fatal: Not a git repository (or any of the parent directories): .gitが出る

そもそもcpp-coverallsを実行するディレクトリが間違っている
docker exec $CONTAINER su - user sh -c "cd /srcdir && coveralls --exclude tools --exclude tests --gcov-options '\-lp' -t $COVERALLS_REPO_TOKEN"
とかやっておけばよさ

coveralls.ioのrepo_tokenってどうやって渡せばいいの

cpp-coverallsを使う☝️でcoveralls.ioに登録してrepo_tokenを貰ってそれを実行引数に入れる必要があるのだけれど、
このtokenは公開すんじゃねえぞ…って言われる
なのでtravisが用意してくれているstring encrypt機能を使ってうまいこと環境変数に入れて実行する

cd /srcdir
gem install travis
travis encrypt  COVERALLS_REPO_TOKEN="repo_token" --add

とかやると良い感じに.travis.ymlに書いてくれる

おわりに

ciってめちゃくちゃ便利ですごい、そうおもいました(T生まれのTさん)
おわり