rust-lang-ja/rust-by-example-ja

TODO: CI

Closed this issue · 19 comments

TRPLと同様、CI環境を構築しようと思います。
Circle CIが無難かと思います。

本件ですが、来週後半(6/17頃)の着手で構わなければ、私が作業しますよ。

本リポジトリを CircleCI に登録しました。https://circleci.com/gh/rust-lang-ja/rust-by-example-ja いまは、"no tests" で fail してしまうので、当面はテストをスキップする設定を入れておこうと思います。これには、master と gh-pages ブランチに circle.yml を追加する必要があるので、後ほど PR を上げます。

また、@joemphilips さん宛に CircleCI への招待メールを送りましたので、確認をお願いします。

ありがとうございます!確認いたしました
コマンド等は空でも結構ですので、よろしくお願い致します。
急いではいないので、いつでも結構です。

当面はテストをスキップする設定を入れておこうと思います。

こちら、PR を上げました。
#28

よろしくお願いします。

@joemphilips

本件、作業を開始しました。

さっそく質問なんですが、./deploy.sh で以下のように ./vendor/gitbook ディレクトリをコピーしているところがあります。

cd stage/_book
...
cp -r ../../vendor/gitbook/* gitbook/

ところが、本リポジトリには、そのようなディレクトリは無いみたいです。一方で、本家の方にはあります 。これはなにか理由があって削除した、ということでしょうか?(つまり ./deploy.sh の cp ... は不要?)

ああ、master ブランチに ./vendor/gitbook はないのですが、./gitbook なら、ありますね。これを cp -r ... しますね。

@joemphilips

まずは HTML の自動生成の機能だけ使えるようにしました(gh-pages への push は後日)
PR #29 をオープンしましたので、レビューをお願いします。

ありがとうございます。
vendor/gitbookは間違えてgitbookにリネームしてしまったようです。一見問題なく動作していたので、なんのためにdeploy.shでコピーしているのかは謎です
本家の方でも謎のようです。

今まで、出来る限り本家のやり方から逸脱しないようにしていたのですが、ちょっと汚すぎるので機会があれば整理していったほうが良いですね。まずはスクリプト類をtools以下にまとめて行こうと思います。近いうちにcheck-*.shのテストスクリプトをtools/tests/に入れてPRします。

vendor/gitbookは間違えてgitbookにリネームしてしまったようです。一見問題なく動作していたので、なんのためにdeploy.shでコピーしているのかは謎です
本家の方でも謎のようです。

そうでしたか。いま見直してみたら、たしかに、gh-pages ブランチには、master ブランチの gitbook 配下にあるディレクトリがないですね。なのに問題なく動作しているようです。 では、不要かもしれないということで、ひとまず CI でもコピー しない ようにします。

スクリプト類を整理していく件も承知しました。私も整理していくことに賛成です。原稿とは違って、この部分は本家のやり方に沿わなくてもいいでしょう。

こちら、対応が遅くてすみません。

CircleCI の gh-pages ブランチへの push 時のエラー内容を確認しました。

https://circleci.com/gh/rust-lang-ja/rust-by-example-ja/17

remote: error: GH006: Protected branch update failed for refs/heads/gh-pages.
remote: error: Required status check "ci/circleci" is expected
To git@github.com:rust-lang-ja/rust-by-example-ja.git
 ! [remote rejected] gh-pages -> gh-pages (protected branch hook declined)
error: failed to push some refs to 'git@github.com:rust-lang-ja/rust-by-example-ja.git'

./tools/circleci/publish-to-gh-pages.sh returned exit code 1

repository settings で、gh-pages ブランチに対して protection が設定されていますが、その中の以下の設定が原因のようです。

  • Require status checks to pass before merging(現状はオン) Choose which status checks must pass before branches can be merged into gh-pages. When enabled, commits must first be pushed to another branch, then merged or pushed directly to gh-pages after status checks have passed.
    • Include administrators(現状はオフ) Enforce required status checks for repository administrators.
    • Require branches to be up to date before merging(現状はオン) This ensures the branch has been tested with the latest code on gh-pages.

gh-pages について、上記の設定をオフにしてみてください。(master ブランチは、設定がオンのまま変更しない方がいいでしょう) 設定変更後、上記のリンク先(CircleCI の build 17 のページ)で、画面右上にある「Rebuild」ボタンを押すと、CI が再実行されます。

ちなみに現在の設定内容ですと、gh-pages ブランチへの直接の push が禁止されます。もしこの設定のまま運用するなら、毎回、以下の手順を踏む必要があります。

  1. master ブランチで HTML ファイルを生成
  2. gh-pages ブランチをベースに、新しいブランチを作成
  3. master ブランチで生成した HTML ファイルを新しいブランチにコピーし、新しいブランチでファイルをコミット
  4. 新しいブランチを GitHub へ push して、新たに CI を実行。CI がパスしたら、新しいブランチが gh-pages へマージ可能になる
  5. (GitHub の PR などの方法で)新しいブランチを gh-pages へマージする

ありがとうございます。
両方とも設定をオフにしましたところ、ビルドに成功しました。

ただ、gh-pagesに誰でもpushできるのは好ましくないので、何らかの制限をかけた方が良いのではないのでしょうか。

deploy keyを指定して、Circle CI側から認証するやり方ができないか試してみます。

両方とも設定をオフにしましたところ、ビルドに成功しました。

よかったです。

ただ、gh-pagesに誰でもpushできるのは好ましくないので、何らかの制限をかけた方が良いのではないのでしょうか。

誰でもではないです。いまこのリポジトリに push できるのは、 write アクセス権を持っている @joemphilips さんと、CircleCI だけのはずです。ですから、問題ないと思うのですが。

deploy keyを指定して、Circle CI側から認証するやり方ができないか試してみます。

CircleCI は常に deploy key を使用してます。デフォルトで read-only の deploy key を GitHub に登録するので push 不可ですが、以下のどちらかの方法を取ると、push ができるようになります。

  • read/write 権限を持つ deploy key を作成する
  • または、user key を作成する

TRPL では、後者の方法を使って、CircleCI が私の名義で push してます(参考

このリポジトリでは、前者の方法を使っているように見えます。というのは、このページ を見ると、Fingerprint: 6c:bf:c5:f7:0a:a7:43:c8:ba:d0:c4:f2:cb:90:75:60 のキーが、CircleCI によって登録されていて、read/write のアクセス権を持っています。

ただ、CircleCI 側に、もうそのキーがないのか、私からは見えません。(remove しましたか?)
https://circleci.com/gh/rust-lang-ja/rust-by-example-ja/edit#checkout

もし remove したのでしたら、同じページにある "If you want to push to your repository from builds, please add a user key as described below or manually add read-write deployment key." の説明に従って、user key か read/write deploy key のどちらかを再登録すれば、CircleCI から再び push できるようになります。

誰でもではないです。いまこのリポジトリに push できるのは、 write アクセス権を持っている @joemphilips さんと、CircleCI だけのはずです。ですから、問題ないと思うのですが。

そうか、organizationのsettingでデフォルトでread accessにしてあったのですね。失礼しました。

このリポジトリでは、前者の方法を使っているように見えます。

そのつもりです。

ただ、CircleCI 側に、もうそのキーがないのか、私からは見えません。(remove しましたか?)
https://circleci.com/gh/rust-lang-ja/rust-by-example-ja/edit#checkout

CircleCI側にはkey 設定ページが2つあります。(違いがよくわからなくて困っています…)

  1. checkout用のkey設定
  2. ssh permisionsのところにあるkey設定です。

こちらのドキュメントにしたがってssh keyの設定を行ったため、後者には登録が反映されています。

多分1. で見えるread only のkey (21:35:8c:11:91:92:ae:77:62:6b:dd:28:e1:c8:8c:59)を削除すれば2.に登録してあるkey(6c:bf:c5:f7:0a:a7:43:c8:ba:d0:c4:f2:cb:90:75:60)を使ってくれるということなのかな?試してみます。

(今ふと思ったのですが、organizationの設定で、member以外はread access only になっていたとしても deploy key を用いたdeployには関係ないですよね?)

これ以上つまりそうだったらTRPLと同様user keyで行います。

多分1. で見えるread only のkey (21:35:8c:11:91:92:ae:77:62:6b:dd:28:e1:c8:8c:59)を削除すれば2.に登録してあるkey(6c:bf:c5:f7:0a:a7:43:c8:ba:d0:c4:f2:cb:90:75:60)を使ってくれるということなのかな?試してみます。

削除しても新たにread onlyのkeyがCircleCI側から作成されましたので関係ないようです。
2. ssh permissionsで設定したkeyを使ってdeployしてくれているようなので、このままで大丈夫だと思います。

結論から言うと、gh-pagesのプロテクションを解除しただけでOKだったみたいですね。お騒がせしました。

あとは

  • artifactをtxzファイルではなく直接htmlで見れるようにする
  • テスト内容の整備

でしょうか。これもおいおいやっていきます。

結論から言うと、gh-pagesのプロテクションを解除しただけでOKだったみたいですね。お騒がせしました。

いえいえ、私も説明不足だったかもしれません。今後も疑問があれば、遠慮なくきいてください。

  • artifactをtxzファイルではなく直接htmlで見れるようにする

実はこちらは PR #29 の時から実現できてます。Artifacts のタブに表示されるファイルとフォルダの一覧で、rust-by-example-ja.txz の前の行に rust-by-example/ というディレクトリがあります。それを開いて、index.html をクリックしてください。

ただ、PR #29 の時はシンタックスハイライトが効いていたのですが、いまは効かなくなっています。これは、PR #29 をマージした後に CircleCI の artifacts の URL の仕様が変わったためです。こちら、明朝くらいまでに修正のための PR を送りますね。

実はこちらは PR #29 の時から実現できてます。Artifacts のタブに表示されるファイルとフォルダの一覧で、rust-by-example-ja.txz の前の行に rust-by-example/ というディレクトリがあります。それを開いて、index.html をクリックしてください。

本当だ!ありがとうございます!

こちら、明朝くらいまでに修正のための PR を送りますね。

お手数おかけして恐縮ですがよろしくお願い致します。

こちら、明朝くらいまでに修正のための PR を送りますね。

PR #32 を上げましたので、レビューとマージをお願いします。

生成された HTML の例
https://17-60434459-gh.circle-artifacts.com/0/tmp/circle-artifacts.OLYd1K7/rust-by-example/hello/print/fmt.html

特に問題はないようなのでこのIssueはcloseします。