ワークフローの.ymlには都度パターンが出現します。使える特殊な文字は以下のようなものがあります。
***![と]?+
*
*はすべてにマッチしますが/は跨ぎません。これは*と設定した時fooやbarはマッチしますが、foo/fooやbar/barにはマッチしません。
またあるワードの前後に適当な文字を付けると、適当な文字は必ず含まれるランダムな文字にマッチします。*-barやfoo-*はfoo-barにマッチします。
**
**はすべてにマッチします。こちらは/にもマッチするのでfoo/fooやbar/barにもマッチします。
こちらもランダムな文字と組み合わせて使えます。**/src/main.jsはpath/to/src/main.jsやa/b/c/src/main.jsなどにマッチします。
また特によく使う表現は拡張子と使う方法です。**.jsや**.mdなどはpath/to/foo.jsやpath/to/readme.mdなど、適当なディレクトリにある.jsや.mdファイルにマッチします。
!
!は直前でマッチしたものの中から一部除外する為のパターンです。例えば**.jsはすべての.jsがマッチしますが。この後に続けて!foo/src/main.jsを置けば、foo/src/main.js以外のすべてのリポジトリに含まれる.jsファイルがマッチします。
[ と ]
[と]で囲んだ部分はある1文字についてのパターンを表現します。*ではすべての文字がマッチしていましたが、この表現にするとその文字をある程度絞り込めます。例えば[abc]であればaかb、cのどれかになります。もうひとつ挙げると[0123456789]は数値だけにマッチすることになります。
上記のような0123...というのは続いた値です。このような場合は[0-9]と-を挟んで省略できます。これはアルファベットも同じで[a-z]や[A-Z]と書けます。
また、これらを[0-9a-zA-Z]のように組み合わせることもできます。
?
直前の文字が「あっても無くても良い」ことを表現できます。*.jsx?というパターンの場合*.jsと*.jsxどちらにもマッチします。
+
直前の文字は必ず1つ以上続くことを表現できます。(無理やり感がありますが)[ademe]+.mdとすればreadme.mdやadem.mdなどにマッチします。
他にこれをよく使うのはセマンティック・バージョニングのパターンなどです。このパターンはv[0-9].[0-9]+.[0-9]+のように書きます。こえでv1.23.681のような文字にマッチします。