メモ2ブログ

メモtoウェブログ。旧ブログはこちら。 http://sakebook.blogspot.jp/

GitHub ActionsでFlutterのPluginをリリースできるActionをMarketplaceに公開した

FlutterでPluginを作りたいと思ったらPubに登録するのが一般的です。

もともとGitHub Actionsでリリースできるようにしていたのですが、Pluginに依らずやることは同じなのでAction化してMarketplaceに公開しました。

github.com

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に投稿したり検索したりするとわりと情報が見つかるので活用すると良いです。

github.community

こちらは今回公開したActionの利用例です。

github.com

参考

Virtual environments for GitHub Actions - GitHub Help

Creating a Docker container action - GitHub Help

Solved: Version numbering for Actions - GitHub Community Forum