2024年6月20日木曜日

Github Actions で rubygems に自動で push する (2要素認証対応あり)

Github Actions で rubygems に自動で push する (2要素認証対応あり)

概要

前回 dockerhub に push するアクションを作成しました
今回は rubygems に push するアクションを作成しました

環境

  • macOS 11.7.10
  • GithubActions v3
  • rubygems (2024/06/18時点)

gem.yml

  • vim .github/workflows/gem.yml
name: ci

on:
  workflow_dispatch:
    inputs:
      rubygems-otp-code:
        description: RubyGems OTP code
        required: true

jobs:
  release:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: ruby/setup-ruby@v1
        with:
          ruby-version: 3.2.2
      - run: bundle install

      - name: Setup git config
        run: |
          git config --global user.email "your-github-email-address@xxx.com"
          git config --global user.name "your-github-name"

      - name: git
        run: |
          git status
          git diff

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

Rubygems の API キーの取得

設定 -> API キー

で作成できます
rubygems に push できる権限を扶養しましょう

RUBYGEMS_API_KEY の登録

リポジトリのシークレットに登録します

自分のプロジェクト -> Settings -> Secrets and variables -> Actions -> Repository secrets -> New repository secret

トラブルシューティング

There are files that need to be committed first.

ローカルの開発環境が Mac の場合 nokogiri など darwin 用のパッケージがインストールされます

     nokogiri (1.16.6-x86_64-darwin)
       racc (~> 1.4)

この状態の Gemfile.lock で Github Actions 上の Ubuntu で bundle install を実行すると linux 用の nokogiri がインストールされます

+    nokogiri (1.16.6-x86_64-linux)
+      racc (~> 1.4)

Github Actions では必ずこれがインストールされてしまうので事前に Mac 上で Linux 用のパッケージも追加してあげる必要があります

  • bundle lock --add-platform linux

You have enabled multi-factor authentication.

Rubygems で 2auth を有効にしている場合はワンタイムパスワードを入力する必要があります

env に GEM_HOST_OTP_CODE: ${{ github.event.inputs.rubygems-otp-code }} を追加することでアクション実行時にワンタイムパスワードを入力することができるのでこれで対応します

動作確認

version.rb や bundle update をして何かしら更新しましょう
そして Github に push します

今回ワークフローは手動でなので手動実行します
さらにワンタイムパスワードを入力しましょう

するとワークフローが実行されて version.rb に記載した新しいバージョンの gem が公開されていることが確認できると思います

最後に

Github Actions で rubygems に自動で push してみました
master に push されると自動で実行されます

Rubygems の API キーには有効期限があるので切れた場合は再度 Github に登録してあげましょう

参考サイト

0 件のコメント:

コメントを投稿