🤔
GitHub Actionsのsecretsをdecodeしたら0byteのファイルになる問題
経緯
SecureなファイルをGitHub Actions上で扱う際、secrets経由で渡すことがあると思うが、secretsでは文字列しか扱えないのでBASE64でencodeして設定することになる。
そのBASE64をGitHub Actions上でdecodeしてファイルとして扱う。
FlutterでAndroidのapk生成をGitHub Actionsで行おうとした際、諸事情によりkeystoreとそのkeystoreのパスワードとかの情報を持つgradleを、BASE64でsecretsに配置した。
このkeystoreとgradleをdecodeする際にエラーとか起きず、ファイル化も出来ているものの0byteファイルになっていて、apk生成に失敗していたため、調べたり解決方法を探ってみた。
確認環境
- GitHub Actionsで
ubuntu-latestを使用
結論
× (Here Strings方式)
base64 --decode <<< ${{ secrets.KEYSTORE_BASE64 }} > test.keystore
○ (echo & pipe方式)
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > test.keystore
一時、前者のHere Strings方式で正常にdecode&ファイル化出来ていたので、そのように記述していたのだが、今回何故か0byteファイルになる事象に遭遇したので、解決方法を探ってみたところ、後者のecho & pipe方式で正常にできることを確認できた。
また、GitHub ActionsのMarketplaceにあるDecode base64 into a file.でも、正常にdecode&ファイル化できることを確認した。(1 line commandで、出来ることをわざわざMarketplaceのAction使いたくなかった)
原因
原因は正直全くわかっていないです。
というのも、
-
Here Strings方式で正常に動いている時もあった -
Here Strings方式とecho & pipe方式でtextファイルにBASE64の文字列を吐き出させて比較したが差が一切ない
参考
Discussion