Techioz Blog

GitHub アクションを使用して Ruby Gem を RubyGems.org にプッシュする際の問題

概要

GitHub Actions を使用して Ruby Gems.org に Ruby gem を公開しようとしているときに問題が発生しました。ワークフローはエラーなしで実行されているように見えますが、Gem を RubyGems にプッシュするときに問題が発生しています。

RubyGems から生成された API キーを使用しており、これを GitHub リポジトリにシークレットとして追加しました。ただし、GitHub Actions ログに次のエラーが表示されます。

Run gem push *.gem --key rubygems_api_key
ERROR:  No such API key. Please add it to your configuration (done automatically on initial `gem push`).
Error: Process completed with exit code 1.

私のワークフローが release.yml でどのように構成されているかは次のとおりです。

- name: Publish to RubyGems
  run: gem push *.gem --key rubygems_api_key
  env:
    RUBYGEMS_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}

API キーが GitHub にシークレットとして正しく追加されていること、およびシークレット名がワークフロー内で一致していることを確認しました。何かが足りないのでしょうか、それとも追加の手順を実行する必要がありますか?ご協力をいただければ幸いです。

ありがとう!

解決策

gem プッシュの –key オプションは、ファイル ~/.gem/credentials または ~/.local/share/gem/credentials、または GitHub Runner 上のローカル Gem ディレクトリにあるキーを見つけることを期待します。

GitHub Actions を使用すると、キーをファイルに書き込んでそこから読み取るのではなく、環境変数でキーを渡す方がはるかに簡単です。 –key オプションを省略した場合、RubyGems は GEM_HOST_API_KEY という名前の環境変数で API キーを検索します。

したがって、必要なのは、Gem Push の呼び出しから –key オプションを削除し、GEM_HOST_API_KEY という名前の環境変数でシークレット API キーを公開することだけです。

- name: Publish to RubyGems
  run: gem push *.gem
  env:
    GEM_HOST_API_KEY: ${{ secrets.GEM_HOST_API_KEY }}