サブモジュール "the-rust-programming-language-ja" の自動更新
Travis による CI 実行時に、サブモジュール "the-rust-programming-language-ja" を最新版に自動更新するように変更します。以前検討した この案 をベースにしています。
現在の CI からの変更点
- PDF を生成する前に、サブモジュール "the-rust-programming-language-ja" のディレクトリで
git pull origin masterし、最新のリビジョンを取得する 。(.travis.ymlファイルの変更) - PDF の生成に成功したら、サブモジュールのリビジョンをコミットし GitHub 上の同じブランチへ push する。(
ci-scripts/commit-trpl-submodule-revision.shで実現) なお、その際、コミットメッセージに[ci skip]の文字列を含めることで、これをトリガーにした新たな CI が起動することを防ぐ。 - 現在のブランチが master ブランチの時だけ、生成した PDF を gh-pages ブランチへ push する。(
ci-scripts/publish-pdf.shで実現)
CI 実行例
テストのために、本リポジトリのフォークで CI を実行しました。
- 2の結果:https://travis-ci.org/tatsuya6502/trpl-ja-pdf/builds/254070203
- 3の結果:https://travis-ci.org/tatsuya6502/trpl-ja-pdf/builds/254082362
@y-yu さん、レビューをお願いします。
@tatsuya6502 さん。
ありがとうございます。 1つ質問なんですが、このPRはthe-rust-programming-language-jaリポジトリが更新されたときにPDF版が自動で生成される、ということを達成しようとしているということでよいでしょうか。それとも、Travis CIを1日1回などペースで定期的に実行するという感じでしょうか。
@y-yu さん
このPRはthe-rust-programming-language-jaリポジトリが更新されたときにPDF版が自動で生成される、ということを達成しようとしているということでよいでしょうか。それとも、...
はい、そうです。この PR では前者を達成しようとしています。
もちろん、この PR をマージしただけでは不十分で、the-rust-programming-language-ja(trpl-ja)に更新があったことを検知できません。そこで、この後、trpl-ja の Circle CI ジョブに修正を加え、trpl-ja の master ブランチが更新されたときに、こちら(trpl-ja-pdf)の Jenkins CI ジョブを自動起動するようにします。具体的には Travis CI ドキュメントの このページ で解説されている curl コマンドを使った方法を用います。
trpl-ja の Circle CI ジョブの修正は、数日中に行う予定です。(PR を上げた時点でお知らせします) その PR がマージされたら、trpl-ja が更新されるごとに trpl-ja-pdf の Jenkins CI ジョブが起動され、PDF が自動生成されるようになります。
@tatsuya6502 さん。
なるほど! 承知しました。 そういう前提で変更点を詳しく見てみることにします。
trpl-ja の Circle CI ジョブの修正は、数日中に行う予定です。
こちらですが、 trpl-ja の方へ PR を上げました。 https://github.com/rust-lang-ja/the-rust-programming-language-ja/pull/278
レビュー、ありがとうございました。ご指摘の2点は修正しました。
が、問題が1つあることに気づきました。修正できるか今夜(?)調べますので、まだマージしないでください。
今回、フォークしたリポジトリ(tatsuya6502)のブランチ(auto-update-submodules)で作業しているのですが、PR を上げたままコミットすると、Travis CI のジョブが2つ走るようです。
- PR 元のリポジトリ: https://travis-ci.org/tatsuya6502/trpl-ja-pdf/builds/255883615
- PR 先のリポジトリ: https://travis-ci.org/rust-lang-ja/trpl-ja-pdf/builds/255883619
前者は期待通り動いているのですが、後者はそうではありません。commit-trpl-submodule-revision.sh がサブモジュールの変更を trpl-ja-pdf の master ブランチに commit して、push しようとします。(deploy.key の decrypt ができなかったのか、push には失敗しています) こういう場合には、PR 先のリポジトリでは commit-trpl-submodule-revision.sh は何もしない方がいいと思います。修正できるか調べてみます。
承知しました。
メモ:テストリポジトリで実施したテスト結果(7/22/2017)
| No. | リポジトリ | ブランチ | アクション | Travis Job | TRAVIS_ EVENT_TYPE |
TRAVIS_ BRANCH |
TRAVIS_ PULL_REQUEST |
TRAVIS_ PULL_REQUEST_ BRANCH |
TRAVIS_ SECURE_ ENV_VARS |
MY_SECRET_ VALUE |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | root | master | push | root #3 (master) | push | master | false | true | [secure] | |
| 2 | root | local-branch1 | push | root #4 (local-branch1) | push | local-branch1 | false | true | [secure] | |
| 3 | root | local-branch1 | open PR #1 to master | root #5 (master) | pull_request | master | 1 | local-branch1 | true | [secure] |
| 4 | root | local-branch1 | push | root #6 (local-branch1) | push | local-branch1 | false | true | [secure] | |
| root #7 (master) | pull_request | master | 1 | local-branch1 | true | [secure] | ||||
| 5 | root | master | merge PR #1 | root #8 (master) | push | master | false | true | [secure] | |
| 6 | fork | fork-branch1 | push | fork #2 (fork-branch1) | push | fork-branch1 | false | false | ||
| 7 | fork | fork-branch1 | open PR #2 to master | root #9 (master) | pull_request | master | 2 | fork-branch1 | false | |
| 8 | fork | fork-branch1 | push | fork #3 (fork-branch1) | push | fork-branch1 | false | false | ||
| root #10 (master) | pull_request | master | 2 | fork-branch1 | false | |||||
| 9 | root | master | merge PR #2 | root #11 (master) | push | master | false | true | [secure] |