6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

GitHub ActionsでGemをリリースする

Last updated at Posted at 2021-12-20

この記事は岩手県立大学とか、岩手の人たち Advent Calendar 2021の 7 日目の記事です!

はじめに

gem のリリースを自動化したいと思い、GitHub Actions でできないかを調査してみました。

gem のリリースの方法は主に 2 つあります。

  • gem push
  • releaseタスク
    • bundlerにある rake タスク

GitHub Actions の公式ドキュメントにはgem pushの例はありますが、releaseタスクを用いた例はありません。

そこで、releaseタスクを用いた場合の方法を記事にしておきます。

workflow の準備

releaseタスクで gem をリリースする際の workflow は以下のようになります。

name: Ruby Gem
on:
  workflow_dispatch:
jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.0.0
      - run: bundle install

      - name: Setup git config
        run: |
          git config --global user.email "YOUR_EMAIL"
          git config --global user.name "YOUR_NAME"

      - name: Publish to RubyGems
        run: bundle exec rake release
    env:
      GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}

Ruby のバージョンや、event、git configに関してはお好きなものにどうぞ。

解説

公式の gem push の例と異なる部分の解説です。

- name: Setup git config
  run: |
    git config --global user.email "YOUR_EMAIL"
    git config --global user.name "YOUR_NAME"

releaseタスクは、gem のバージョンに応じた git tag を自動で付与し、push してくれます。
そのため、gitconfigを用意してあげる必要があります。

- name: Publish to RubyGems
  run: bundle exec rake release

releaseの rake タスクです。

env:
  GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}

bundlerreleaseタスクの内部ではgem (gem pushgem)が使われています。
そして、gemでは API Key をGEM_HOST_API_KEY環境変数から読むことができます。

https://guides.rubygems.org/command-reference/
The push command will use ~/.gem/credentials to authenticate to a server, but you can use the RubyGems environment variable GEM_HOST_API_KEY to set the api key to authenticate.

そのため、~/.gem/credentialsに API Key を用意しなくても認証できます。

Secrets に API Key を設定する

GitHub リポジトリのSettingsから Secrets を設定できます。

image.png

課題

RubyGems へのリリースに OTP 認証を必須とする設定もあります。
GEM_HOST_OTP_CODE環境変数に OTP コードを設定してあげると良さそうなのですが、現状試した限りだとうまく読み取ってくれませんでした。
もし、OTP 認証をうまくやれる方法があれば教えていただけると幸いです。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?