最近GitHubでActionsを使っています。個人開発の話です。会社ではちょっと違うやつを使ってるんで。
Actionsはベータに当選(?)して使えるようになってから少し使って、本リリースされたあと最近になって頻繁に使うようになった。過去に作ったPython関連のリポジトリに適用して回る作業をしたり。これで、PyPIにリリースしたりgithub-pagesにビルド結果を上げたりといったタスクが非常に簡単になった。
自分が使っているルールは割と単純で、
- masterに上げる=github pagesにビルド結果が上がる
- 最近peaceiris/actions-gh-pages@v2にforceOrphanオプションができて、gh-pagesに履歴を残さない設定が可能になった
- ブランチに上げる=テストが走り、PRのページにCIの結果が上がる
- 先頭に「v」を使ったタグがつく=vを抜いたバージョンのwheelを作ってPyPIにアップロード
って感じ。バージョン番号は適当に0.0.1からインクリメントしているという、まあ、、不良開発者です。本当はセマンティックバージョニングにするのがいいんでしょうけどね。非互換があっても末尾インクリメントだけ! だってユーザほとんどいない&カネもくれないのに、めんどくさいじゃん。
GitHub Actionsの良いところはいくつかありますが、UIがGitHubだけで完結するというのが唯一無二のものでしょう。Deploy Key(公開鍵)もGitHubのリポジトリ設定ページで上げられる、秘密鍵もGitHubの設定でシークレットに入れて、PyPIの認証情報もシークレットに突っ込む。これ、別のCIサービスのページに移らなくても全部設定できちゃうのよね。「連携してる」ってのと「内蔵してる」ってのは割と違いがあるものでね。
ただ残念なのは、GitHubのAPIでDeploy Keyは登録できてもシークレットを操作できないんですよね。これが操作できれば、ssh-keygenでキーを作ってDeploy Keyとシークレットにそれぞれ登録、.pypircから認証情報を持ってきてシークレットに登録…という操作を一度に設定できるコマンドを作っとけば管理しやすいんだけど。
今の状況で困るのは、例えばPyPIの認証情報を変更した場合に、リポジトリのページを回ってポチポチやりまくってシークレットを変更して回るという作業をしなきゃいけない。これ結構うんざりする作業と想像している。あと複数のリポジトリで似たようなファイル(.github/workflows/*.yml)を作っていくので、変更したくなった時に一気に変更する、あるいは変更もれを検出する、というのが難しいよね。
その辺は今後考えていきたい。同期されてるかを定期的にCIでチェックできるといいんだけどなー。