先日Processing用動作生成ライブラリFrameRecorderに音声指定機能を追加した際、あわせてGitHubのリポジトリにビルドのワークフローも追加しました。
追加の際はGitHubの提供するWebページ「GradleでのJavaのビルドとテスト - GitHub Docs」を参考にしたのですが、当然のことながら記述内容はGitHub ActionsとGradleの理解が前提。GitHub Actions初挑戦かつGradle初心者の私には少々情報が足りなかったため、別途Webを検索するなどして補完、無事成功するワークフローを作成できました。せっかくなので調べた情報をまとめておきます。
記述はGradle Wrapperの利用が前提
Gradleは未インストール環境での実行を可能にするラッパー(The Gradle Wrapper)を提供していて、GitHubの文書の記述はその利用を前提としています。ですのでGradle Wrapperを利用していない環境ではまずコマンドラインで gradle wrapper
を実行するなどしてGradle Wrapperをリポジトリに追加する必要があります。
Gradle Wrapperはバリデーション実行が望ましい
Gradle Wrapperの実行ファイルの本体はJARフォーマットのためコミットの差分の確認は容易ではありません。この特徴はサプライチェーン攻撃に利用される恐れがあるため、Gradle開発チームは対応策としてリポジトリに存在するGradle Wrapper実行ファイルの未改ざんをハッシュで検証するGradle Wrapper Validationを提供しています。GradleでのJavaのビルドとテスト - GitHub Docsのサンプルにも当然のようにステップとして含まれています……が、本稿記述の時点で日本語版では英語から翻訳されていないため存在理由を意識しづらくなっています。
バリデーションを行わなくてもビルドに支障はありませんが、公開リポジトリはいつどのような攻撃にあってもおかしくありませんから、脆弱性の生じる余地を減らすために用意が望ましいと言えます。
Gradle Wrapper実行スクリプトには実行権限が必要
Gradle Wrapperの実行はシェルスクリプト(gradlew
)またはバッチ(gradlew.bat
)を介して行うことになりますが、ランナー環境によるのか、試していたときに gradlew
が実行不可というエラーを確認しました。そのままのエラーなので、実行前に実行権限を追加すれば解決します。
- name: Grant execute permission for gradlew
run: chmod +x ./gradlew
以上、参考になりましたら幸いです。