tblsをセットアップするGitHub Actionとしてsetup-tbls(を作るツールとしてgh-setup)を作った
タイトルが何を言っているのかよくわからないと思いますので順を追って紹介したいと思います。
tblsをセットアップするGitHub Actionとしてsetup-tbls を作った
setup-tblsはtblsをインストールしてくれるGitHub Actionです。
各所で「ないの?」とは言われており(最近Issueもたった)、いつか作らないとなと思っていたのですが、いろいろ重なって作りました。
私はGoで作ったツールのActionはDocker container actionを使うのですが、tblsでそうするとDockerコンテナ上で動くtblsからデータベースサーバの名前解決ができなかったりして、それも手を鈍らせている原因でした。
今回作成した setup-tbls はComposite actionで作っているので上記のような心配もありません。
なお余談ですが、ActionというかRunner上のJobの実行環境については次の資料にまとめてあります。
使い方は簡単で紹介するまでもないですが、 uses: k1low/setup-tbls@v1
で呼び出せば終わりです。
# .github/workflows/doc.yml name: Document on: push: branches: - main jobs: doc: runs-on: ubuntu-latest steps: - name: Checkout .tbls.yml uses: actions/checkout@v3 - uses: k1low/setup-tbls@v1 - name: Run tbls for generate database document run: tbls doc
setup-*
なGitHub Actionを作るためのツールとして gh-setup を作った
setup-*
や install-*
というActionは、大抵は実行ファイルをPATHに設置してくれるものです。
Goであれば本当にバイナリポン置きでいいのですし、そのバイナリは大抵GitHub Releasesにあるのであとは設置するだけなのですが、意外にこれが面倒なのです。
- まず実行環境を特定する(OSやArch)
- GitHub Releasesから特定バージョンもしくはlatestなリリースを特定
- 1の実行環境に適したリリースアセットを特定
- 3のリリースアセットが圧縮ファイルだったら展開
- 4の展開したファイルから必要なもの(今回は実行ファイル)だけ取得
- 実行環境のPATHを特定し5のファイルを設置
また、GitHub Releasesへのアセットの置き方も開発者によって、リポジトリによって千差万別です。私個人でもバラバラです(その時々でマイブームがある)。
それをいい感じにしてくれるツールとして gh-setup を作りました。
使い方はいくつかあるのですが、今回はGitHub Actionとしての使い方を紹介します*1。
例えば、tblsをインストールする場合は以下のように書けます。
# .github/workflows/doc.yml [...] steps: - name: Setup k1LoW/tbls run: k1LoW/gh-setup@v1 with: repo: k1LoW/tbls
これだけで、煩わしい「GitHub Releaseからアセットを取得して実行ファイルをPATHに設置」をやってくれます。 中身は結構泥臭い実装が入っています。気になる方は是非 gh-setup のソースコードをご覧ください。
また、泥臭い実装を信用できない人にもいろいろオプションを用意していますので、詳しくは action.ymlのinputs:セクション をご覧ください。
さて、ここまで来たら勘のいい方はわかるかと思いますが、setup-tblsはgh-setupを組み込んで作っています。
setup-tblsのaction.ymlは次のとおりです。
name: 'Setup tbls' description: 'GitHub Action for tbls, a CI-Friendly tool for document a database, written in Go.' branding: icon: 'box' color: 'blue' inputs: github-token: description: The GitHub token default: ${{ github.token }} required: false version: description: Version of tbls default: latest required: false force: description: Enable force setup default: '' required: false runs: using: 'composite' steps: - uses: k1LoW/gh-setup@v1 with: repo: github.com/k1LoW/tbls github-token: ${{ inputs.github-token }} version: ${{ inputs.version }} bin-match: tbls strict: true force: ${{ inputs.force }}
これだけです。ほとんどの処理はgh-setupの中にあります。
setup-*
というGitHub Actionを作りたい方へ
是非 gh-setup をご検討ください。うまく動かない、気に食わない挙動についてはフィードバックいただけると嬉しいです。
これで setup-*
は作りたい放題!