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 }}