Shogo's Blog

Dec 3, 2020 - 2 minute read - github mysql

2020年に書いた GitHub Action + α

この記事はフラーAdvent Calendar 2020の3日目の記事です。 2日目はid:gibachan03 さんで「Androidアプリエンジニアになって気づいたiOSとの違い」でした。


さて、公開当初色々して遊んだ GitHub Actions ですが、今年も引き続き遊んでました。 いくつか新しい Action を作ったものの、このブログでは紹介していなかったので、2020年作ったものを紹介したいと思います。

actions-upload-release-asset

一言で表すのならば、 Yet Another actions/upload-release-asset GitHub Action です。 GitHub の Releases にファイルをアップロードする Action です。 このアクションは GitHub 公式という安心感はあるのですが、一度のステップで1個のファイルしかアップロードできません。

ソースファイル本体と、ビルド済みバイナリと・・・と色々アップロードしたいものがあったので、新しく作りました。 actions-upload-release-asset@actions/glob の Glob Pattern に対応しているので、一つのステップで複数のファイルをアップロードすることができます。

例えば、カレントディレクトリにあるテキストファイルを全てアップロードする例は以下のようになります。

on:
  release:
    types:
      - created

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      # steps for building assets
      - run: echo "REPLACE ME!" > assets.txt

      - uses: shogo82148/actions-upload-release-asset@v1
        with:
          upload_url: ${{ github.event.release.upload_url }}
          asset_path: "*.txt"

actions-setup-mysql

MySQLをインストールしてくれる Action です。 GitHubが提供している Linux イメージに MySQL はインストールされているのですが、MySQL 8.0 と MySQL 5.7 の二種類しかありません。 (ref. ubuntu-20.04, ref. ubuntu-18.04)

まあ、 Linux に関しては Docker で落としてくればいい話なんですが、問題になるのは macOS と Windows。 そもそもインストールされてないし、Dockerも使えない。 仕方がないからソースから自前でコンパイルするか・・・とバイナリをビルドして、ビルド済みのバイナリをダウンロードできるようにしたものが actions-setup-mysql です。

以下のようにバージョンを指定するだけで、ダウンロードして起動してくれます。便利!

steps:
- uses: actions/checkout@v2
- uses: shogo82148/actions-setup-mysql@v1
  with:
    mysql-version: '8.0'
- run: mysql -uroot -h127.0.0.1 -e 'SELECT version()'

MariaDBもいけます。

steps:
- uses: actions/checkout@v2
- uses: shogo82148/actions-setup-mysql@v1
  with:
    mysql-version: '10.5'
    distribution: 'mariadb'
- run: mysql -uroot -h127.0.0.1 -e 'SELECT version()'

対応しているバージョンは

  • MySQL
    • 8.0
    • 5.7
    • 5.6
  • MariaDB
    • 10.5
    • 10.4
    • 10.3

これより古いバージョンは macOS や Windows で素直にビルドできないので諦めました。 欲しい人はプルリクエストを投げてください。

おまけ

厳密には今年じゃないけどブログでは紹介してないやつ & 最近のアップデート内容です。

actions-setup-redis

actions-setup-mysql の Redis版ですね。 Redisのダウンロードと起動をやってくれます。

steps:
- uses: actions/checkout@v2
- uses: shogo82148/actions-setup-redis@v1
  with:
    redis-version: '6.x'
- run: redis-cli ping

actions-setup-perl

Setup Perl GitHub Action を公開しました」で紹介した perlをインストールしてくれる Action です。

今年リリースされた v5.32.0 はもちろん、公開当時は未対応だった v5.22 以前の Windows ビルドにも対応しました。 GNUMakefile が存在しないので、dmakeやnmake用のMakefileを参考に再構築するという地道な努力(shogo82148/perl-win32-gnumakefiles) によって実現しました。長い道のりだった・・・。

まとめ

actions-setup-mysql, actions-setup-redis, actions-setup-perl のバイナリは AWS S3 においてあるんですが、 最近使用料が去年の倍くらいになった気がします 🤔 「S3の使用料なんて大したことないだろ!」と高をくくってました。ネットワークのアウトって意外と高いんですね・・・

そういうわけで皆様のお気持ちを心からお待ち申し上げています。


フラーAdvent Calendar 2020 4日目の担当は @furusax さんで「CloudFormation でドリフトを検出してしまった Aurora MySQL クラスターを再インポートした話」です。