CircleCIをpublic reposに使うときに気をつけること

CircleCIをpublic reposに使うときに気をつけること

TL;DR

CircleCIをpublic reposに使うときは、気をつけて使う必要がある。秘匿情報を入れてる時は、fork reposからのpull requestをbuildしてはいけない(CircleCIデフォルト設定)。

経緯

CircleCIでfork reposからのpull requestが来ない。
Tachikoma.io を使ってみた – えいのうにっき

circle ciでpublicで同じように使えてる、気がしてたけどprivateとは条件がよく考えると違ったり、travis-ciと全く同じようにはいかない、部分があった。
で、普通に考えるとcircleci的には危ない機能なので設定は安全に倒してあった。

注意

悪意のあるpull requestがたとえばrake testputs YOUR_CREDENTIALSってやってると、credentials取れてしまう(疑似コード)
CircleCIにデプロイ設定書く運用はprivate reposだと普通なので、同じようにやりつつpublicにするとアブナイ。

設定

Circle CIのOSS用エントリを読み直す。

http://blog.circleci.com/a-step-into-open-source/

We only have experimental support for building pull requests from forks automatically — there are some weird edge cases, and it’s hard to find a model of sharing settings that works right. (If you’d like to try what we have, it’s available in Project Settings > Experiment Settings as well).

設定箇所が書いてあった。

Circle CI
> Project Settings
> Tweaks
> Experimental Settings
> Project fork pull requests: On

設定箇所には注意書き

Project fork pull requests
CircleCI will automatically update the commit status shown on GitHub’s pull request page. Builds will be run using the parent repository’s plan and will be able to access the parent project’s environment settings.

If you have SSH keys or AWS credentials stored in your project settings and untrusted forks can make pull requests against your repo, then this option isn’t for you!

これをonにすると、これがこうなる。

Exec tachikoma update 20150208025527 by tachikomapocket · Pull Request #7 · metarubygems/carrion_crow
Exec tachikoma update 20150208035252 by tachikomapocket · Pull Request #11 · metarubygems/carrion_crow

forkからのpull request、いわゆるフツーのpull requestでcircle ci動くようになる。で、注意書きが問題になる。

結論

で、どうすればいいの? まだ頭のなかで詰められてない。travis-ciのencrypt使うしかない? encryptがどこまで安全かは未調査。

広告

Travis CI Meetup 9/17 and Tachikoma.io talk

The meetup about Travis CI will be held on Sep. 17(wed), 2014, at Shibuya Hikarie.
Travis CI Meetup – connpass

I’ll have 5 minutes talk about Tachikoma.io, which is Tachikoma as a service.
My talk title is “When was the build passing? – A gap between Travis CI and GitHub”.
If you have 5 minutes talk, you can attend(At the current time, 2014-09-08 0:02).
Welcome~

Travis CI Meetup が 9/17(水)に渋谷ヒカリエであります。
Travis CI Meetup – connpass
5分のライトニングトークでTachikoma.io (Tachikoma as a service) について話します。
トークタイトルは「その build passingはいつ? – Travis CI とGitHubの間」です。
もう参加募集人数超えちゃってますが、LT話すならまだ一枠空いてます(2014-09-08 0:02時点)。
来てね〜

Travis-ci alternative

自分がやる気はないからこういう言い方するのは卑怯なんだけど,rubygemsのエコシステムがtravis-ciに依存しすぎててうまくない.

Rubygems eco system depends on travis-ci too much. I said this, is not fair, because I don’t want to support this yet.

時差は適当にごまかして時系列
2013-12-25 Ruby 2.1.0リリース
2013-12-25 ruby-buildとrvmがsemverについてこれずドタバタ
2013-12-25 travisのrvmがすぐにはあげられず2.1.0指定しても2.1.0-preview2が使われてしまう そのまま数日
2013-12-27 bundler 1.5.0リリース
2013-12-28 bundler 1.5.1リリース
2013-12-28 ruby2.1.0, bundler1.5.0でtravis全体ロールアウト
あれ,うちのtravisコケるようになってなになに?? bundler1.5.x, rubygems2.2.0にバグ報告がだんだん出てくる(イマココ)

Time line(without timezone):
2013-12-25 Ruby 2.1.0 release
2013-12-25 ruby-build and rvm do not catch up with ruby’s new semver policy
2013-12-25 travis does not apply updated rvm immediately, because this needs whole roll out. 2.1.0 brings 2.1.0-preview2 in travis.
2013-12-27 bundler 1.5.0 release
2013-12-28 bundler 1.5.1 release
2013-12-28 travis update all systems with ruby2.1.0 and bundler1.5.0
NOW: many people notice now, my project broken? travis-ci problem? bundler?? rubygems??? (here now)

どうなれば幸せになるんかな.別にいーじゃんの精神でゆるく行くのがきっといいんだろうなあ.期待値勝手に自分の中であげちゃってるんだろうな..

How do we become happy? Flexible attitude is better, I think. Too high expectation I have(I feel), while I don’t realised this.

Links:
Ruby 2.1.0 heyoooooooooo · e888781 · travis-ci/travis-rubies
Bundler::GemNotFound: Could not find with ruby 2.1.0 and bundler 1.5.0 · Issue #2780 · bundler/bundler
Fatal error: undefined method’ for nil:NilClass (NoMethodError) on Travis CI with Ruby 1.8.7 · Issue #2784 · bundler/bundler
Sort files after compacting them to avoid problem in Ruby 1.8.7 by floehopper · Pull Request #763 · rubygems/rubygems

Ruby-2.1.0-preview1 in Travis-CI

Ruby-2.1.0-preview1 in Travis-CI, not installed, but binary exists, so I can use quickly. Some precompile rubies does not appear `rvm list` and `rvm list known`.

Work:

rvm:
–  2.1.0-preview1
– ruby-2.1.0-preview1

https://travis-ci.org/sanemat/tachikoma/builds/13749201
https://travis-ci.org/sanemat/tachikoma/builds/13749848

Error:

rvm:
– 2.1.0

https://travis-ci.org/sanemat/tachikoma/jobs/13750033

see:

Travis CI: Precompiled Ruby Versions http://rubies.travis-ci.org/
`rvm list`, `rvm list known` https://gist.github.com/sanemat/7392103

Cores for travis-ci

I got a best solution for detecting the count of division in travis-ci, using `grep -c ^processor /proc/cpuinfo`.  This code from https://github.com/grosser/parallel (MIT License). I don’t try actual yet.

RAILS_ENV=test bundle exec rake ‘parallel:create[`grep -c ^processor /proc/cpuinfo`]’ ‘parallel:load_schema[`grep -c ^processor /proc/cpuinfo`]’ ‘parallel:prepare[`grep -c ^processor /proc/cpuinfo`]’

bundler_args: –deployment –without development:production –jobs=`grep -c ^processor /proc/cpuinfo`

script: bundle exec parallel_test -n `grep -c ^processor /proc/cpuinfo` -t rspec spec

Gemfile.lockとbundle –deploymentとtravis-ci

travisでerrorになってたのでなんだろうと見たら、travisの動きとbundlerの動きがケンカしてるっぽい。gitプロトコル使えって怒られてる。えっ httpsでしょ最近は。shoulda-matchersのpull requestのdescriptionうのみにすると、Gemfile.lock検出したらtravis-ciのbundleオプションに–deploymentが勝手につく、–deploymentオプションがつくとgitプロトコル使えって怒られる??これが一ヶ月前かららしい。

https://github.com/thoughtbot/shoulda-matchers/pull/330

errorになっているビルド

https://travis-ci.org/mrtaddy/fenix-knight/builds/10606497

travis側で–deploymentなしのbundleにするshoulda-matchersのとは問題がちょっと違うかもしれない。before_install: gem install bundler –pre で済む話なのかなあ。よく分かってないので保留

travis-ciの”ruby-head”のアップデート今度来るってよ

travis-ciのrvmの”ruby-head”は全然ruby-headでなくて2.0.0-p0より古くて邪魔だったのが、来週アップデート来るってよ よかったですね!

freenode#travis

sanemat_
Hi, I have a question about rvm “ruby-head” version for ruby application. “ruby-head” in travis is not ruby-head, behind from Ruby 2.0.0-p0. Where do I report this issue?
henrikhodne
sanemat_: Sorry about that. It’s actually already reported: https://github.com/travis-ci/travis-ci/issues/1016
henrikhodne
sanemat_: We’re working to get updated images out next week.
sanemat_
thx! I’m looking forward to this!

travis-ciでrails3.2とrails4.0流す

Edited: 2013-04-14 1:00

ベストプラクティスじゃなかったっぽいのでこのエントリはout of date! Gemfileごとに個別のディレクトリ用意するのがよさそう。

Set each gemfile to separate directory
https://github.com/sanemat/actionview-link_to_blank/pull/5

—-

travis-ciドキュメントといくつかプロジェクト見てるとこんな感じぽい。gemfileで切り分けちゃう。

https://github.com/sanemat/actionview-link_to_blank/blob/5d2968085ed90da869a24668f0a01887f06e23b2/.travis.yml

https://github.com/sanemat/actionview-link_to_blank/blob/c650fa077ffb9799022be0918f4dd503a2f91db6/gemfiles/rails3.2.gemfile
https://github.com/sanemat/actionview-link_to_blank/blob/c650fa077ffb9799022be0918f4dd503a2f91db6/gemfiles/rails4.0.gemfile

travis-ciはこれでいいとして、localで、これをコメントアウトしたりコメント外したりでbundleしまくるのが頭悪い感じなのでどうにかしたい。
https://github.com/sanemat/actionview-link_to_blank/blob/ac509d5f4840341934ed75fb36afb835452b0aa2/Gemfile

せっかくつくったgemfilesがあるから、これを使って
vendor/bundle-rails3.2
vendor/bundle-rails4.0
にbundleするようにして、bundle execで指定する
2つのbundle ディレクトリをgit ignoreする
2つ流せるrake task作る

なかんじかな こっちは試してない

Ten Things You Didn’t Know Travis-CI Could Do

I talked about travis-ci at Reject TokyoRubyKaigi10.

I could talk only until #13, because time was limited to 10 minites 🙂
I love Travis-CI and James’ presentation style.

#1 Play Nethack
#2 Play Nethack!
#3 Play Minecraft
#4 Build Timeouts
#5 BUG: Detect wrong commit
#6 Sous Chef
#7 32bit Ubuntu
#8 All in One
#9 Quick Feedback
#10 Freenode
#11 Mailing List
#12 Role Model: qa@it
#13 Role Models: soryu
#14 Only MAJOR MINOR TEENY
#15 Bundler Version
#16 ForCapybara
#17 Reduce Call Rake
#18 RAILS_ENV
#19 rake spec vs rspec
#20 rake spec options
#21 rake cucumber options
#22 rspec Format Document
#23 rake COMMAND –trace
#24 Current My Best
#25 bundler_args, –without
#26 capistrano/bundler
#27 Gemfile Group
#28 Remove Unnecessary Gems
#29 Not therubyracer, But nodejs
#30 Use :ci Group?
#31 Actual Each Tests
#32 Use Travis-pro (era of closed beta)
#33 Use Travis-pro public beta
#34 Travis-Pro price?
#35 Updating is worthful