GitHub Actionsを使ってみたかったので、gemパッケージのrake spec
とrubygems.org
へのpushを自動化してみました。
GitHub Actionsの準備
Travis CIなど他のCIと同じく、yaml
ファイルで設定を記述して、ワークフローを構築します。
yaml
ファイルはリポジトリ内の.github/workflows
にまとめて置きます。
yaml
ファイルはActionsのタブから、ブラウザのエディタでも記述することができます。
使い方自体の詳細は、下記公式ドキュメントや他の記事を参考にしてみてください。
https://help.github.com/en/actions/automating-your-workflow-with-github-actions
PRに対してRSpecテストを実行する
こちらはRubyのテンプレートがあるので、それを少し修正すれば問題ないです。
Actionsタブにもサジェストされます。
name: RSpec on: pull_request jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: ruby-version: 2.6.x - name: Build and test with Rake run: | gem install bundler bundle install --jobs 4 --retry 3 bundle exec rake spec
on:
の部分がトリガーになるので、ここを目的のpull_request
に変えておきます。
masterへのpushでgemをアップロードする
こちらもテンプレートがありますが、多少手を加えました。
name: Ruby Gem on: push: branches: - master jobs: build: name: Build + Publish runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Ruby 2.6 uses: actions/setup-ruby@v1 with: version: 2.6.x - name: Build and test with Rake run: | gem install bundler bundle install --jobs 4 --retry 3 bundle exec rake - name: Publish to RubyGems run: | mkdir -p $HOME/.gem touch $HOME/.gem/credentials chmod 0600 $HOME/.gem/credentials printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials gem build *.gemspec gem push *.gem env: GEM_HOST_API_KEY: ${{secrets.RUBYGEMS_AUTH_TOKEN}}
master
プッシュへのトリガーだけで良いので、on:
の部分は上記のようにします。
GitHub Packageは今回は対象外なので、そちらは削除しています。
(GPRを設定したい場合こちら: https://help.github.com/en/github/managing-packages-with-github-packages/configuring-rubygems-for-use-with-github-packages)
gemをpushする前に、テストを走らせたいので、先程のrake spec
の部分を直前に差し込みます。
Secretsの値は後からセットします。
GitHubのレポジトリの設定
Secretsに.gems/credentials
の中のトークンを値としたキーを作っておきます。
PRのマージの条件にCIパスを設定したい場合、Settings > Branches
から以下のようにします。
(この辺りの機能はころころ変わるので、画像と異なる場合があります)
動くとこのようになります。