GitHub ActionsでFlutterのPluginをリリースできるActionをMarketplaceに公開した
FlutterでPluginを作りたいと思ったらPubに登録するのが一般的です。
もともとGitHub Actionsでリリースできるようにしていたのですが、Pluginに依らずやることは同じなのでAction化してMarketplaceに公開しました。
Marketplaceに公開までにあたりいくつかハマった点があったので共有します。
Dockerイメージのユーザはrootである必要
今回はcirrues/flutterのDockerイメージを利用していたのですが、ユーザを指定していたため、Permission deniedで怒られました。
現状GitHub ActionsはDockerのデフォルトユーザ(root)での実行を想定しています。それ以外だとGITHUB_WORKSPACE
にアクセスできないため、ファイル作成などでPermission errorが出ます。
なので、今回のケースにおいてはDockerfile内でユーザをrootに指定しなおします。
- Dockerfile
USER root
Dockerイメージをそのまま使う場合は引数で指定してあげるとうまくいきます。
container: image: cirrusci/flutter:stable options: -u root
inputsは自動的に環境変数に登録される
env
で指定しなくても環境変数として渡ります。もしも明示的に引数として扱いたい場合は args
に渡してあげればよいです。
inputsで渡した場合は頭に INPUT_
が付いて大文字に変換された名前で環境変数に登録されます。任意の名前で扱いたい場合は env
で渡すのもよいと思います。
同一リポジトリでの確認
作成しているGitHub Actionsの確認に利用できます。.github/workflows/
に置いたyamlが、通常のGitHub Actionsと同様に実行されます。 uses: ./
と指定してあげることで、作成中のActionを指定することができます。自分が確認している範囲では、ローカル環境での動作確認はまだできないみたいです。
jobs: test_job: runs-on: ubuntu-latest name: Test steps: - name: Checkout uses: actions/checkout@v1 - name: Test action uses: ./
作成したActionのMarketplaceでのURLはname
が使われる
GitHubのリポジトリ名が使われると思ってたのですがそうではなかったです。作成の際にはnameに気をつけてください。
ややこしいことに、yamlのAction名にはリポジトリ名が利用されます。揃えておいたほうが利用者にとってわかりやすいので、なるべく揃えたほうが良いと思います。
Actionを利用するときのバージョン指定は完全一致じゃないとNot foundになる
よく使う、 actions/checkout@v1
のようにメジャーバージョンだけ指定すればよしなにv1.y.z
の最新のバージョンが利用されると思っていたのですがそうではありませんでした。
現状はタグ名の完全一致で見ているようです。 v1
タグがしっかり存在していました。
しかしこの仕様は見直される可能性があるみたいです。
まとめ
ドキュメントをよく読むことに尽きるのですが、構造化されてなくて現状結構情報が探しにくいと思います。すでに公開されているActionが非常に参考になるので探して動かしてみると色々わかると思います。
また、Community Forumに投稿したり検索したりするとわりと情報が見つかるので活用すると良いです。
こちらは今回公開したActionの利用例です。
参考
Virtual environments for GitHub Actions - GitHub Help
Creating a Docker container action - GitHub Help
Solved: Version numbering for Actions - GitHub Community Forum