
はじめに
こんにちは!!こんにちは!!Webエンジニアのshimeです。
最近、GitHub Actionsを利用してGitHub Packagesにgemを公開する機会があったので、その方法をご紹介いたします!!
GitHub Actionsとは

改めて説明する必要は無いと思いますが、GitHub Actionsはワークフローの実行を自動化できるサービスです。
GitHubで任意のコードプロジェクトをビルド、テスト、パッケージ、リリース、 またはデプロイするためにリポジトリで設定できる、カスタムの自動プロセスです。
(引用元:GitHubヘルプ)
とあるように、CI、CD機能をリポジトリに直接ビルドし、特定のイベントをトリガーにワークフローファイルを実行するように設定することができます。
詳しくはGitHubヘルプをご確認ください。
GitHub Packagesとは

GitHub Packagesはパッケージホスティングサービスで、GitHubと完全に統合されています。 パッケージをパブリックリポジトリに公開(パブリックパッケージ)して、GitHubの全員と共有したり、 プライベートリポジトリに公開(プライベートパッケージ)してコラボレータやOrganizationと共有したりできます。
(引用元:GithuHubヘルプ)
とあるように、ソフトウェアパッケージホスティングサービスで npm gem といったパッケージをサポートしています。
gemをホスティングする場合は、 RubyGems.org に公開することが一般的ですが、今回は社内で利用するprivateなgemなため、GitHub Packagesにホスティングする方法を選択しました。
RubyGems.orgに公開するほどでも無い時、障害の発生を考慮してGitHub Packagesにも公開しておきたい時、privateなgemをホスティングしたい時にGitHub Packagesが選択肢に上がるのではないでしょうか。
今回やったこと
今回はGitHub Actionsを利用してgemをGitHub Packagesに公開しました。
ワークフローの設定例がこちらです。
(社内で利用しているものはprivateなため、個人のリポジトリのものです。また、一部設定も変更しています。)
name: Publish Gem
on:
push:
tags:
- 'v*'
今回はvから始まるタグがpushされた際にワークフローを実行しています。gemの公開という用途を考えると特定のタグやブランチがpushされた時が主な利用ケースになると思います。
また、タグの名前を?や*などのパターンマッチを用いてワークフローを実行することもできます。
詳しくはこちらをご参照ください。
- name: Setup Release Credentials
env:
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
run: |
mkdir -p $HOME/.gem
touch $HOME/.gem/credentials
chmod 600 $HOME/.gem/credentials
echo "---" >$HOME/.gem/credentials
echo ":github: Bearer ${GITHUB_TOKEN}" >> $HOME/.gem/credentials
ここではcredentialsファイルを作成し、アクセストークンを記載しています。
通常であれば、write:packagesスコープを持ったアクセストーンを記載する必要がありますが、GitHub Actionsのワークフローでは、そのリポジトリに対するアクセストークンを利用できるので、個人のアクセストークンの設定や管理の手間を省くことができます。
- name: Publish Gem to GitHub Packages
run: |
export OWNER=$( echo ${{ github.repository }} | cut -d "/" -f 1 )
gem build *.gemspec
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gem
gem build *.gemspecでリポジトリ直下のGEMNAME.gemspecファイルに基づいてgemをビルドし、
gem push --KEY github --host https://rubygems.pkg.github.com/${OWNER} *.gemでGitHub Packagesに公開しています。詳しくはこちら
上記のワークフローを設定している状態でv0.1.3などのタグを付与するとワークフローが実行されGitHub Packagesに公開されます。
公開するとリポジトリやユーザーのページから確認することができます

インストール方法やダウンロード状況なども確認することができます。
また、パッケージの説明を記載することもできるため、リリースノートやチェンジログとして使うこともできそうです。

さいごに
GitHub Actionsを利用してGitHub Packagesにgemを公開する方法について記載しました。
GitHub Packagesへの公開の一部を自動化したい場合やprivateなgemをホスティングしたい場合などに是非利用してみてください!!