注: GitHub Packages は、GitHub AE では現在ベータ段階です。
前提条件
-
RubyGemsは2.4.1以降を使わなければなりません。 RubyGemsのバージョンは、以下のようにすれば分かります。
$ gem --version
-
Bundler 1.6.4 以降が必要です。 Bundlerのバージョンは以下のようにすれば分かります。
$ bundle --version Bundler version 1.13.7
GitHub Packages への認証を行う
非公開パッケージ、内部パッケージ、公開パッケージを発行、インストール、削除するには、アクセス トークンが必要です。
personal access token を使って、GitHub Packages または GitHub AE API の認証を受けることができます。 personal access token を作成するときは、必要に応じてさまざまなスコープをトークンに割り当てることができます。 personal access token のパッケージ関連のスコープの詳細については、「GitHub Packagesの権限について」を参照してください。
GitHub Actionsワークフロー内でGitHub Packagesレジストリに認証を受けるには、以下の方法が使えます。
GITHUB_TOKEN
では、ワークフロー リポジトリに関連付けられているパッケージを発行します。read:packages
以上のスコープが設定された personal access token では、他のプライベート リポジトリ (GITHUB_TOKEN
ではアクセスできない) に関連付けられているパッケージがインストールされます。
personal access token で認証を行う
GitHub Packages でパッケージを発行およびインストールするには、適切なスコープで personal access token を使う必要があります。 詳しくは、「GitHub Packages の概要」を参照してください。
gem を公開してインストールするには、personal access tokenを使って GitHub Packages に対する認証を行うように、RubyGems または Bundler を構成できます。
新しい gem を公開するには、 ~/.gem/credentials ファイルを編集してpersonal access tokenを含めることによって、RubyGems で GitHub Packages に対して認証を行う必要があります。 このファイルが存在しない場合は、新しい ~/.gem/credentials ファイルを作成します。
たとえば、以下を含むように ~/.gem/credentials を作成または編集し、TOKEN をpersonal access tokenに置き換えます。
---
:github: Bearer TOKEN
gem をインストールするには、https://USERNAME:TOKEN@REGISTRY_URL/NAMESPACE/
を含むように gem ソースを更新することによって、GitHub Packages に対する認証を行う必要があります。 以下のように置き換えてください。
USERNAME
を GitHub に。TOKEN
をpersonal access token に。NAMESPACE
を、gem を含むリポジトリを所有している個人アカウントまたは Organization の名前に。REGISTRY_URL
を、インスタンスの Rubygems レジストリの URL であるrubygems.HOSTNAME
に。 HOSTNAME は、ご自分のエンタープライズ のホスト名に置き換えます。
パッケージをグローバルに使用できるようにする場合は、次のコマンドを実行して、レジストリをソースとして追加できます。
gem sources --add https://USERNAME:TOKEN@REGISTRY_URL/NAMESPACE/
Bundler で認証を行うには、personal access token を使うように Bundler を構成します。USERNAME は GitHub のユーザー名、TOKEN はpersonal access token、NAMESPACE は gem を含むリポジトリを所有している個人アカウントまたは Organization の名前に、それぞれ置き換えます。REGISTRY_URL
は、インスタンスの Rubygems レジストリの URL である rubygems.HOSTNAME
に置き換えます。 HOSTNAME は、ご自分のエンタープライズ のホスト名に置き換えます。
$ bundle config https://REGISTRY_URL/NAMESPACE USERNAME:TOKEN
パッケージの公開
既定で、GitHub はパッケージと同じ名前の既存のリポジトリにパッケージを発行します。 たとえば、octo-org
組織に GEM_NAME
を発行すると、GitHub Packages によって gem が octo-org/GEM_NAME
リポジトリに発行されます。 gem の作成の詳細については、RubyGems のドキュメントの「gem の作成」を参照してください。
-
GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。
-
gemspec からパッケージをビルドして、gem パッケージを作成します。
GEM_NAME
を gem の名前に置き換えます。gem build GEM_NAME.gemspec
-
パッケージを GitHub Packages に公開します。
NAMESPACE
をプロジェクトを含むリポジトリを所有している個人アカウントまたは Organization の名前に、またGEM_NAME
を gem パッケージの名前に置き換えます。REGISTRY_URL
は、インスタンスの Rubygems レジストリの URL であるrubygems.HOSTNAME
に置き換えます。HOSTNAME
は、ご自分のエンタープライズ のホスト名に置き換えます。注: gem の
metadata.gz
のファイルの圧縮されていない最大サイズは、2 MB 未満である必要があります。 その制限を超える gem をプッシュする要求は失敗します。$ gem push --key github \ --host https://REGISTRY_URL/NAMESPACE \ GEM_NAME-0.0.1.gem
同じリポジトリへの複数パッケージの公開
複数の gem を同じリポジトリに公開するには、GitHub リポジトリの URL を gem.metadata
の github_repo
フィールドに含めることができます。 このフィールドを含めた場合、GitHub でのリポジトリの照合は、gem 名を使うのではなく、この値に基づいて行われます。HOSTNAME を、ご自分のエンタープライズ のホスト名に置き換えます。
gem.metadata = { "github_repo" => "ssh://HOSTNAME/OWNER/REPOSITORY" }
パッケージのインストール
GitHub Packages の gem は、rubygems.org の gem を使うのと同じように使用できます。GitHub ユーザーまたは Organization をソースとして ~/.gemrc ファイルに追加するか、Bundler を使用して Gemfile を編集することで、GitHub Packages に対して認証を行う必要があります。
-
GitHub Packagesに認証を受けてください。 詳細については、「GitHub Packages への認証」を参照してください。
-
Bundler については、GitHub ユーザーまたは Organization をソースとして Gemfile に追加して、この新しいソースから gem をフェッチするようにします。 たとえば、指定したパッケージに対してのみ GitHub Packagesを使用する新しい
source
ブロックを Gemfile に追加できます。GEM_NAME
を、GitHub Packagesからインストールするパッケージに、NAMESPACE
を、インストールする gem を含むリポジトリを所有している個人アカウントまたは Organization に置き換えます。REGISTRY_URL
は、インスタンスの Rubygems レジストリの URL であるrubygems.HOSTNAME
に置き換えます。HOSTNAME
は、ご自分のエンタープライズ のホスト名に置き換えます。source "https://rubygems.org" gem "rails" source "https://REGISTRY_URL/NAMESPACE" do gem "GEM_NAME" end
-
1.7.0 より前の Bundler バージョンの場合は、新しいグローバルな
source
を追加する必要があります。 Bundler の使用方法の詳細については、bundler.io のドキュメントを参照してください。source "https://REGISTRY_URL/NAMESPACE" source "https://rubygems.org" gem "rails" gem "GEM_NAME"
-
パッケージをインストールしてください。
$ gem install GEM_NAME --version "0.1.1"