🤔
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