Fletで作ったアプリをGitHub Actionsで実行可能ファイルにパッケージ化したい
もうすでに似たようなGitHub Actionsのワークフローを作成している方がいる。
flet pack
でビルドしているらしい。
- run: flet pack app.py --name ${{ matrix.flet-name }}
公式チュートリアルのTo-Doアプリをベースに試してみる。
flet create
でFlet Appを作る。
$ flet create todo-app
Done!
Run the app:
flet run todo-app
$ tree todo-app
todo-app
|-- README.md
|-- assets
| `-- icon.png
|-- main.py
`-- requirements.txt
1 directory, 4 files
$
とりあえずリポジトリを作成
そのままコピーして作成した。
GitHub CLIのコマンド gh release create
と gh release upload
を使っている。
${{ secrets.GITHUB_TOKEN }}
については以下を参考
同じApp名を複数の個所に書くのが気になるので環境変数にした。
試しにtagをpushしてみた。
$ git tag -a v0.0.1 -m 'test'
$ git push origin v0.0.1
Enumerating objects: 1, done.
Counting objects: 100% (1/1), done.
Writing objects: 100% (1/1), 156 bytes | 156.00 KiB/s, done.
Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/mh326/flet-todo-packaging-test.git
* [new tag] v0.0.1 -> v0.0.1
ワークフローの実行に失敗してる。環境変数にしたのが悪い。
strategy
内では env
コンテキストが使えないらしい
Repository variablesから読み取るようにした。
まだ失敗している。
Installed versions
Version 3.1 was not found in the local cache
Error: The version '3.1' with architecture 'x64' was not found for Ubuntu 22.04.
The list of all available versions can be found here: https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json
actions/setup-python
に倣った記述に書き直したら解消された。
が、 flet pack
実行時に PyInstaller
が無いといわれた。
requirements.txtにPyInstallerを追加したら、実行成功した。
gh release create
にて --draft
を指定しているため、最初は下書きになっている。
v*
というタグがプッシュされたときにクロスプラットフォームでビルドを行い、Draft Releaseを作成するというものになっています。
最終的に手動でファイルを確認して問題がなければReleaseを公開するという方針にしております。https://ksk-log.com/posts/2023/12/23-ghaction-flet-cross-build/
todo_windows.zip
をダウンロードして動作することが確認できた。
Draft状態のReleaseを編集して公開した。
ここまでのまとめ
-
build-flet-cross.yml
の作成 -
requirements.txt
にpyinstaller
を追加 - Repository variablesに
APP_NAME
を追加
現状では flet pack
でパッケージ化を行っているが、 flet build
でパッケージ化したい。
flet build
を実行するにあたって、 Flutter SDKをセットアップする必要がある。
ここら辺のアクションが使えるかもしれない。
Linux用のビルドが中々うまくいかなかったためコメントアウトしたが、WindowsとMacOS用のビルドはうまくいった。
Todoアプリのチュートリアルを終えて、Releaseに実行可能ファイルをアップロードした。
その時のメモはこちら