GitHub Actionsで複数のステップをひとまとめにして再利用

CI/CD
この記事は約5分で読めます。

2021/11/26追記

いつの間にかcompositeでもusesが使える(他のアクションを呼べる)ようになっていました。

GitHub Actions: Reduce duplication with action composition | GitHub Changelog
GitHub Actions: Reduce duplication with action composition

以降は、過去の不幸話のため、どうかお引き取りください。。

結果(2020/8/27時点)

GitHub Actionsをはじめて2日目の超初心者です。4日目の初心者です。

プライベートリポジトリでワークフローと悪戦苦闘しているときに、似たようなステップの列挙にでくわして、持病のめんどくさい病が発症したので、改善を試みました。

  • Composite run steps でシェルコマンド実行の複数ステップを再利用可能なアクションとしてひとまとめにできる。
  • Composite run steps タイプのアクションは他のタイプ同様、publicな形でもlocal(リポジトリ内限定)な形でも定義可能。
  • Composite run steps では uses で他のアクションを使用することはまだできない。

今後の改善は下記あたりをウォッチしておくのが良さそう。

Next Steps for Fully Functioning Composite Actions · Issue #646 · actions/runner
NOTE: For those who are not aware, I'm a college student who interned at GitHub for Summer 2020. Thank you all for all the thoughtful comments and feedback ...

やりたいこと

GitHub Actionsで複数のステップをまとめて、再利用して楽したい。。

DcokerとかJavaScriptとか、それはそれでめんどくさいし、そんな大した内容ではないので、ライトに複数ステップをまとめて使いまわしたい。CircleCIでいうcommands的なイメージです。

ひとまず、下記Yamlを見てください。試行錯誤中のGitHub Actionsのワークフローを定義したYamlファイルです。リリースが公開された時に走るワークフローのつもりです。

Gradle Wapperのバリデーションして(セキュリティ的理由)、ビルド(コンパイルとかユニットテスト)して、GitHub Packagesにパブリッシュするだけのショボいワークフローです。

のりお氏のセンスがないだけな気もしますが、これ見るとしんどいですよね。チェックアウトして、Javaのセットアップして、Gradleのキャッシュ取得してみたいなごちゃごちゃが複数回出てきて、読むのもメンテするのもしんどいです。。

でも、これくらいの内容にDockerとかJavaScriptで独自アクションをわざわざ用意するのもなんかしんどくないですか?

できたこと

というわけで、たどり着いた解決策がComposite run stepsを使う方法です。

runs配下のstepsを見ての通り、ワークフローで慣れ親しんだステップを書くだけで簡単そうですね。ただし、シェルコマンドの実行しか定義できませんでした。。

他リポジトリから使い回すほどの内容でもないので、今回はいったんローカルのアクションとして下記pathに上記yamlファイルを配置しました。

.github/actions/build-with-gradle/action.yml

上のアクションを使用することで、冒頭でお見せしたリリース用のワークフローは下記のように!!!

あんまり変わっていないですね。。間違い探しレベル。。

独自アクションを用意することに変わりはないのですが、この方法ならaction.ymlを用意するだけなので、DockerやJavaScriptを使用したアクションよりはだいぶ楽で、のりお氏みたいにDockerやJavaScriptが書けなくても安心!!!

と、期待したのですが、だめでした。。

上のようにローカルのアクションを利用する場合、それより前にactions/checkoutを呼び出しておく必要があります。(自リポジトリ内のファイルにアクセスするので当たり前かもですが。。)

できなかったこと

Composite run stepsの中からもusesで他のアクションを使用したかったのですが、現状は未対応でした。下記のようなアクションを書きたかったけどだめだった。。

Unexpected value ‘uses’と怒られます。

まあ、run stepsという名の通り、runしか使えないということですね。。usesも含めたイケイケなComposite Actionは下記に期待です。

Next Steps for Fully Functioning Composite Actions · Issue #646 · actions/runner
NOTE: For those who are not aware, I'm a college student who interned at GitHub for Summer 2020. Thank you all for all the thoughtful comments and feedback ...

参考

ちゃんとした説明は下記英語版のオフィシャルのドキュメントに記載されています。

Creating a composite action - GitHub Docs
In this guide, you'll learn how to build a composite action.

ひとつだけよく分からなかったのは、上記ドキュメントの中で、アクションのバージョンを@v1と指定するためにラベルを作成するみたいな説明があるのですが、タグの間違いですかね。。

ちなみに、このComposite run stepsですが、下記英語版にはアクションのタイプとして記載されているのですが、

About custom actions - GitHub Docs
Actions are individual tasks that you can combine to create jobs and customize your workflow. You can create your own actions, or use and customize actions shar...

8月にリリースされたばかりだからか、下記日本語版には載っていませんでした。。(2020/8/25時点)

About custom actions - GitHub Docs
Actions are individual tasks that you can combine to create jobs and customize your workflow. You can create your own actions, or use and customize actions shar...

コメント

タイトルとURLをコピーしました