結論
- uses: actions/checkout
した際には .github/
は持ってきてくれないため、file not found になるからです。
邪魔にならないところにまとめておくのがいいと思います*1。
補足
checkout した際に持ってきてくれているファイルは steps
内で run: ls -la
すると分かります。
*1:一例として、lib/github_actions_resources など
2021/09/26 時点での情報です。
ローカルで実行する意義というのは以下になるかなと思います。
「1.」についてはプライベートリポジトリのみの話なので*4、プライベートリポジトリにした上で無料時間の消費を気にするならば素直に💴で叩くべきだとは思います*5。
あるいは「セルフホストランナー」をサクッと立てるのもよいと思います(これ自体は無料です)。GitHub 側としてはローカル実行するならばこの選択肢を選んでもらいたいのではないかと想像しています*6。
「2.」については……まあそういうときはあるのですが、たとえばセンシティブな情報を直書きとかしないのならば、後からsquashする前提でコミットメッセージに「CI のテスト中」であることをそれっぽく書いていれば見る人も察してくれるんじゃないかなと思います。
ローカルの実行では遅すぎたりマシンリソースを持っていかれないようにしたりするために SaaS を使っているので、そのメリットを享受しない理由としては弱いんじゃないかなと思っています*7。
そしてローカルだととにかく apt が遅いのがつらい*8。
cy.get('.foobar').eq(3)
のように、get
したあとに eq
で取得できるget
の戻り値を変数に格納している場合、eq
を実行してしまうと格納した変数のオブジェクトは変更される
以下のような HTML があったとします。
<html> <head></head> <body> <div class="foobar">1</div> <div class="foobar">2</div> <div class="foobar">3</div> <div class="foobar">4</div> <div class="foobar">5</div> </body> </html>
4つ目のセレクタを得たい場合には次のように get
してから eq
で取得します。
cy.get('.foobar').eq(3)
上記の例において、5つのセレクタのオブジェクトを以下のように selectors
に格納したとします。
const selectors = cy.get('.foobar')
この個数をチェックすると、確かに5つです。
selectors.should('have.length', 5) // true
ここで例えば3つ目のセレクタを抽出するために selectors
に対して eq メソッドを以下のように実行したとします。
const thirdSelector = selectors.eq(2)
この後に selectors
の個数をチェックすると「1つ」になっています(「5つ」ではない)。
selectors.should('have.length', 5) // false
エラーメッセージは次のとおりです。
AssertionError: Timed out retrying after 4000ms: Not enough elements found. Found '1', expected '5'. + expected - actual -1 +5
上記の場合以外でもエラーが出ることがあります*1。したがって、無用なハマりを防ぐためにも変数に格納することは控えたほうがいいでしょう。
as
を使うべき、という意味でもあるのでしょう。
*1:たとえば .find でチェーンするときなど
Ubuntu です。
以下のようにタイムアウトでエラーになります.
$ sudo service elasticsearch status ● elasticsearch.service - Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Active: failed (Result: timeout) since Sun 2021-08-29 15:31:13 JST; 19s ago Docs: https://www.elastic.co Process: 1990 ExecStart=/usr/share/elasticsearch/bin/systemd-entrypoint -p ${PID_DIR}/elastic> Main PID: 1990 (code=exited, status=143)
サービス開始スクリプト中の TimeoutStartSec
の値を十分に大きくする。
Elasticsearch の例です。/lib/systemd/system/elasticsearch.service
を編集します。
# Allow a slow startup before the systemd notifier module kicks in to extend the timeout # TimeoutStartSec=75 TimeoutStartSec=300
編集したあとはリロードします。
$ sudo systemctl daemon-reload
これで再起動後に十分な時間をもってサービスが起動するはずです。